如何通过 kubeadm手工搭建一个 kubernetes 测试学习的集群

通过kubeadm手工部署kubenetes测试学习集群

1 环境

KVM 虚拟机(基于CentOS7.7,并注意/etc/resolv.conf不要超过3个,并且禁用swap swapoff -a -v)两台

  • master IP 190.190.190.144
  • node IP 190.190.190.145

2 部署的简要步骤

2.1 安装用到的软件包

2.2 节点的配置

2.3 初始化集群的master节点

2.4 导入集群的网络

2.5 将node节点加入集群

3 部署的详细步骤

3.1 安装用到的软件包

3.1.1 [master和node节点] 配置”kubelet”, “kubeadm”, “kubectl” 依赖的repo

1
2
3
4
5
6
7
8
9
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3.1.2 [master和node节点] 安装用到的软件包. “docker” 的repo是”extras”

1
# yum install -y yum-utils device-mapper-persistent-data lvm2 docker kubelet kubeadm kubectl

3.2 节点的配置

3.2.1 [master和node节点] 设置主机名,配置hosts,设置sysctl,停掉SELINUX和firewalld,使能daemons

3.2.1.1 设置主机名

[master节点]

1
# hostnamectl set-hostname vm40master144

[node节点]

1
# hostnamectl set-hostname vm40node145

3.2.1.2 [master和node节点] 配置hosts

1
# echo -e "190.190.190.144 vm40master144\n190.190.190.145 vm40node145" >>/etc/hosts

3.2.1.3 [master和node节点] 设置sysctl

1
# echo -e "net.ipv4.ip_forward=1\nnet.bridge.bridge-nf-call-ip6tables=1\nnet.bridge.bridge-nf-call-iptables=1\nnet.bridge.bridge-nf-call-arptables=1" >>/etc/sysctl.conf && sysctl -p

3.2.1.4 [master和node节点] 停掉SELINUX

1
# sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux && setenforce 0

3.2.1.5 [master和node节点] 停掉firewalld

1
# systemctl disable firewalld --now

3.2.1.6 [master和node节点] 使能daemons

1
# systemctl enable kubelet --now && systemctl enable docker --now

3.3 [master节点] 初始化集群的master节点 (pod-network-cidr必须加,service-cidr可选,ignore-preflight-errors可选all忽略所有错误,注意把执行完成后的”kubeadm join xxx”记录下来。

1
2
# kubeadm init --pod-network-cidr=220.220.220.0/24
# cp /etc/kubernetes/admin.conf ~/.kube/config

注意: kubeadm的安装过程不涉及网络插件(CNI)的初始化,因此kubeadm初步安装完成的集群不具备网络功能,任何Pod包括自带的CoreDNS都无法正常工作. 而网络插件的安装往往对kubeadm init命令的参数有一定的要求. 例如,安装flannel插件时
需要指定类似–pod-network-cidr=220.220.220.0/24, 详情可参考pod-network

3.3.1 [master节点-可选]部署完毕,可以执行下面的命令让其他用户也可以使用(如果直接用root,可以只执行下面mkdir, cp admin.conf的动作)

1
2
3
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.4 [master节点] 导入集群的网络kube-flannel.yml (如将文件放在/opt目录, 可以直接wget)

1
# kubectl apply -f /opt/kube-flannel.yml

3.5 [node节点] 将node节点加入集群(join的信息在步骤3.3)

1
# kubeadm join 190.190.190.144:6443 --token mcwpl9.c8235qnndhnbc7jc --discovery-token-ca-cert-hash sha256:83dcb922fca5b4d045808beca203069fa13cdd4ef3092db8f2f58864e1ccedfc

3.6 到此,部署结束(如安装失败,可以使用reset,再init一次, 参考附录信息).

4 附录

  • [master节点- 要使用]
    1
    2
    # kubeadm reset
    # kubeadm init --pod-network-cidr=10.244.0.0/16
  • [node节点-token 是有时间限制的,如果超时,重新生成]
    1
    2
    3
    # kubeadm reset
    # kubeadm join 190.190.190.144:6443 --token mcwpl9.c8235qnndhnbc7jc --discovery-token-ca-cert-hash sha256:83dcb922fca5b4d045808beca203069fa13cdd4ef3092db8f2f58864e1ccedfc
    # kubeadm token create