如何在CentOS 8上安装Kubernetes集群
从CentOS 8开始,docker现在已经被podman和buildah所取代,这两个工具都来自Redhat。事实上,docker包现在已经从默认的包存储库中删除了。
结构
主节点——充当控制平台,运行集群数据库和API服务。
在主节点上安装Kubernetes集群
要让Kubernetes工作,需要一个容器化引擎。
我们将使用Docker-CE。
下面的命令都是在CentOS 8主节点上执行的
配置主机名、防火墙和SELinux
修改 /etc/hosts设置系统的主机名
192.168.1.97 master-node 192.168.1.98 node-1 worker-node-1 192.168.1.99 node-2 worker-node-2
禁用selinux
# setenforce 0 ### 临时禁用selinux ### 永久禁用selinux # sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux # reboot
Kubernetes的端口
Kubernetes 使用了下面的各种端口进行通信:
协议 | 方向 | 端口 | 作用 | 使用者 |
---|---|---|---|---|
tcp | 入 | 6443* | Kubernetes api服务器 | 所有 |
tcp | 入 | 2379-2380 | etcd服务器,客户端api | kube-apiserver,etcd |
tcp | 入 | 10250 | Kubelet Api | api和控制面板 |
tcp | 入 | 10251 | Kube-scheduler | kube调度器 |
tcp | 入 | 10252 | kube-controller-manager | kube控制管理器 |
设置防火墙
# firewall-cmd --permanent --add-port=6443/tcp # firewall-cmd --permanent --add-port=2379-2380/tcp # firewall-cmd --permanent --add-port=10250/tcp # firewall-cmd --permanent --add-port=10251/tcp # firewall-cmd --permanent --add-port=10252/tcp # firewall-cmd --permanent --add-port=10255/tcp # firewall-cmd –reload # modprobe br_netfilter # echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
在CentOS 8上安装Docker-CE
添加Docker存储库,因为它不再在默认包仓库中。
# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
同时安装containerd.io包
它是一个守护进程,用于管理其主机系统的完整容器生命周期,从映像传输和存储到容器执行和监视,再到底层存储和网络附件等等。
# dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
安装最新版本的docker-ce包
# dnf install docker-ce
启动docker服务
# systemctl enable docker # systemctl start docker
在CentOS 8上安装Kubernetes (Kubeadm)
添加Kubernetes安装源
创建一个新文件 /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
安装kubeadm包
Kubeadm可以协助创建最小的Kubernetes集群, 能够通过Kubernetes一致性测试。
它还支持集群生命周期功能,比如升级、降级和管理引导令牌。同时Kubeadm还可以与Ansible和Terraform等其他工具进行集成。
# dnf install kubeadm -y
启动kubelet服务,并设置开机自启动
# systemctl enable kubelet # systemctl start kubelet
用kubeadm创建一个控制面板
Kubernetes主节点充当集群的控制平台,运行集群所需的一些关键服务。
禁用swap以便能运行“kubeadm init”命令
# swapoff -a
初始化Kubernetes主节点
# kubeadm init
记下最后的命令,稍后需要在工作节点上运行该命令。
kubeadm join 192.168.1.97:6443 --token nuxlu.xrsdfs0ixtnms5 --discovery-token-ca-cert-hash ha256:f776ea35r4353dffdea2a997a1cf8caedddafd6d4360d60sdc82314683478hjmf783
使用Kubernetes
Kubernetes初始化成功后,就开始使用集群了。
# mkdir -p $HOME/.kube # cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # chown $(id -u):$(id -g) $HOME/.kube/config
现在确认kubectl命令已激活。
# kubectl get nodes NAME STATUS ROLES master-node NotReady master
可以看到状态是NotReady
设置pod网络
pod网络是集群的覆盖网络,部署在当前节点网络的顶部。它的设计是为了让pod能相互连接。
根据需要,部署集群网络是一个很灵活的过程,有许多选项可以选择。为了安装尽可能简单,我们将使用Weavenet插件,它不需要任何配置或额外的代码,它为每个pod提供一个IP地址。
# export kubever=$(kubectl version | base64 | tr -d '\n') # kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever
现在再次 检查master-node的状态, 应该变成了 Ready
# kubectl get nodes NAME STATUS ROLES master-node Ready master
添加工作节点到Kubernetes 集群中
设置工作节点的主机名,防火墙和SELinux
- 修改 /etc/hosts
192.168.1.97 master-node 192.168.1.98 node-1 worker-node-1 192.168.1.99 node-2 worker-node-2
- 禁用selinux
# setenforce 0 # sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
- 更新防火墙
# firewall-cmd --permanent --add-port=6783/tcp # firewall-cmd --permanent --add-port=10250/tcp # firewall-cmd --permanent --add-port=10255/tcp # firewall-cmd --permanent --add-port=30000-32767/tcp # firewall-cmd --reload # echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
配置Docker-CE和Kubernetes的安装源
# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo # dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
安装docker-ce最新版本
# dnf install docker-ce
启动docker服务,并设置开机启动
# systemctl enable docker # systemctl start docker
添加Kubernetes安装源
创建一个新文件 /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
在CentOS 8上安装Kubeadm
# dnf install kubeadm -y
启动Kubeadm服务,并设置开机启动
# systemctl enable kubelet # systemctl start kubelet
将工作节点加入Kubernetes集群
在两个工作节点上运行之前记下的命令:
kubeadm join 192.168.1.97:6443 --token nuxlu.xrsdfs0ixtnms5 --discovery-token-ca-cert-hash ha256:f776ea35r4353dffdea2a997a1cf8caedddafd6d4360d60sdc82314683478hjmf783
检查主节点状态
返回主节点,运行下面命令查看状态:
# kubectl get nodes
如果所有步骤都成功运行,那么应该看到主节点上的node-1和node-2处于“ready”状态。