--- title: "Kubeadm" date: 2019-10-30T11:19:06+08:00 lastmod: 2019-10-30T11:19:06+08:00 tags: ["kubernetes", "k8s", "kubeadm"] categories: ["container"] --- ## kubeadm 安装 kubernetes ### 全部服务器配置 IP 地址 | 主机名 | 操作系统 | 内存 | swap | 硬盘 | Internet | firewalld | selinux | /etc/hosts 增加行 --------- | -------- | -------- | ---- | ---- | ---- | -------- | --------- | ------- | ------------------ 10.0.2.80 | master80 | CentOS7 | 4GB | 关闭 | 20GB | 可达 | 关闭 | 关闭 | 127.0.0.1 master80 10.0.2.81 | node81 | CentOS7 | 2GB | 关闭 | 20GB | 可达 | 关闭 | 关闭 | 127.0.0.1 node81 10.0.2.82 | node82 | CentOS7 | 2GB | 关闭 | 20GB | 可达 | 关闭 | 关闭 | 127.0.0.1 node82 - 确认各服务器工作网卡的 MAC 和 UUID 均不相同 ```bash #Ovirt 从模板创建虚拟机可忽略此步骤 #不确定时可参考如下命令 rm -rf /etc/udev/rules.d/70-* sed -i -e '/HWADDR/d' -e '/UUID/d' /etc/sysconfig/network-scripts/ifcfg-{eth,enp}* ``` - 配置好 IP,确认各服务器网络互连,且可连互联网 ```bash #10.0.2.80 sed -i 's/10.0.2.127/10.0.2.80/' /etc/sysconfig/network-scripts/ifcfg-eth0 #10.0.2.81 sed -i 's/10.0.2.127/10.0.2.81/' /etc/sysconfig/network-scripts/ifcfg-eth0 #10.0.2.82 sed -i 's/10.0.2.127/10.0.2.82/' /etc/sysconfig/network-scripts/ifcfg-eth0 ``` - 关闭各服务器的防火墙 ```bash systemctl stop firewalld systemctl disable firewalld ``` - 关闭各服务器的 selinux ```bash setenforce 0 sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config ``` - 关闭各服务器的 swap ```bash swapoff -a sed -i '/swap/s/^/#/' /etc/fstab ``` - 安装 ebtables 和 ethtool ```bash yum install ebtables ethtool ``` - 配置各服务器的 hostname ```bash #10.0.2.80 hostnamectl set-hostname master80 echo '127.0.0.1 master80' >> /etc/hosts #10.0.2.81 hostnamectl set-hostname node81 echo '127.0.0.1 node81' >> /etc/hosts #10.0.2.82 hostnamectl set-hostname node82 echo '127.0.0.1 node82' >> /etc/hosts ``` - 重启各服务器 ```bash reboot ``` ### 安装 docker - 各服务器安装 docker ```bash yum install docker ``` - 各服务器配置 iptables 转发 ```bash cat < /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system ``` - 各服务器配置 docker 本地仓库(可选) ```bash cat < /etc/docker/daemon.json { "insecure-registries":["10.0.16.125:5080"] } EOF ``` - 各服务器启动 docker ```bash systemctl enable docker && systemctl start docker ``` ### 安装 kubernetes - 各服务器配置 kubernetes yum 源 ```bash cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF ``` - 各服务器安装 kubeadm ```bash yum install -y kubelet kubeadm kubectl ``` - 各服务器启动 kubelet ```bash systemctl enable kubelet && systemctl start kubelet ``` ### 在 master80 服务器上安装 kubernetes master 服务组件 - 初始化 kubeadm ```bash kubeadm init --pod-network-cidr=192.168.0.0/16 --token-ttl 0 mkdir -p /root/.kube cp -i /etc/kubernetes/admin.conf /root/.kube/config #记录下输出的最后一行,类似如下 #kubeadm join --token : --discovery-token-ca-cert-hash sha256: ``` - 安装 Calico 网络插件 ```bash kubectl apply -f http://docs.projectcalico.org/v2.4/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml ``` ### 加入其他节点 - 在 node81 和 node82 服务器上执行以下命令,即 master80 服务器 'kuberadm init' 命令的最后一行输出 ```bash kubeadm join --token : --discovery-token-ca-cert-hash sha256: ``` - 在 master80 服务器查看节点和 pod 情况 ```bash kubectl get pods --all-namespaces kubectl get nodes ```