云网牛站
所在位置:首页 > Linux云服务器 > 使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

2020-01-10 15:42:44作者:李燕稿源:云网牛站

您要在CentOS 7/CentOS 8上为您的开发项目设置一个三节点Kubernetes集群:1个主节点和两个或多个Worker节点?本指南将引导您完成在运行并配置了防火墙的Ansible和Calico CNI的CentOS 8/CentOS 7 Linux机器上设置Kubernetes群集的步骤。Kubernetes(K8s)是一个开源系统,用于自动化容器化应用程序的部署、扩展和管理。首先,请确保系统已更新,并安装所有依赖项,包括容器运行时,Kubernetes软件包以及为k8配置防火墙。我的实验室基于以下环境:

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

 

步骤1:设定标准要求

我写了一个Ansible角色来进行标准的Kubernetes节点准备工作,该角色包含以下任务:

安装所需的基本软件包。

设置标准系统要求,禁用交换,修改sysctl,禁用SELinux。

安装和配置您选择的容器运行时,cri-o,Docker,Containerd。

安装Kubernetes软件包,kubelet,kubeadm和kubectl。

在Kubernetes主节点和工作节点上配置Firewalld。

访问我的Github页面进行设置:https://github.com/jmutai/k8s-pre-bootstrap

这是我最近执行的输出:

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

 

步骤2:初始化单节点控制平面

此部署适用于具有集成etcd的单个控制平面节点。

我们将使用kubeadm引导符合最佳实践的最小可行Kubernetes集群,kubeadm的好处是它支持其他集群生命周期功能,例如升级、降级和管理引导令牌。

单控制节点引导程序要求:

控制节点机器的默认IP地址。

DNS名称/负载平衡器IP(如果以后计划添加更多控制节点)。

以root用户或sudo用户的身份进行SSH访问。

登录到控制节点:

$ ssh user@k8smaster01

检查可用于初始化Kubernetes集群的参数:

$ kubeadm init --help

我们将使用的标准参数为:

--pod-network-cidr:用于指定Pod网络的IP地址范围。

--apiserver-advertise-address:API服务器将通告其正在监听的IP地址。

--control-plane-endpoint:为控制平面指定一个稳定的IP地址或DNS名称。

--upload-certs:将控制平面证书上传到kubeadm-certs Secret。

如果使用Calico,建议的Pod网络为:192.168.0.0/16。

对于Flannel,建议将Pod网络设置为10.244.0.0/16。

对我来说,我将运行以下命令:

sudo kubeadm init \

 --apiserver-advertise-address=192.168.122.10 \

 --pod-network-cidr 192.168.0.0/16 \

 --upload-certs

为了能够将单个控制平面kubeadm集群升级到高可用性,您应该指定–-control-plane-endpoint来设置所有控制平面节点的共享端点,这样的端点可以是负载均衡器的DNS名称或IP地址:

kubeadm init \

 --apiserver-advertise-address=192.168.122.227 \

 --pod-network-cidr 192.168.0.0/16 \

 --control-plane-endpoint <DNS-End-Point>

 --upload-certs

这是我的安装输出:

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

复制kubectl配置文件:

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

参考:安装及使用kubectl、kubectx和kubens轻松管理多个Kubernetes集群

下面是将Pod网络部署到集群。

我将使用Calico,但您可以自由使用您选择的任何其他Pod Network插件:

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

如下面的输出所示,这将创建许多资源:

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

使用以下命令确认所有Pod正在运行:

watch kubectl get pods --all-namespaces

一旦一切都按预期运行,输出将如下所示:

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

请注意,每个窗格都有正在运行状态,即上图中的STATUS是Running。

 

步骤3:将工作节点加入集群

现在您已经准备好控制节点,您可以添加将在其中运行工作负载(容器和Pod等)的新节点,您需要在用于运行Pod的每台计算机上执行此操作。

1、SSH到机器

$ ssh user@workermachine

2、运行kubeadm init输出的命令,例如:

sudo kubeadm join 192.168.122.10:6443 --token nx1jjq.u42y27ip3bhmj8vj \

 --discovery-token-ca-cert-hash sha256:c6de85f6c862c0d58cc3d10fd199064ff25c4021b6e88475822d6163a25b4a6c

如果令牌已过期,则可以使用以下命令生成一个新令牌:

kubeadm token create

获取令牌:

kubeadm token list

您可以使用以下命令获取Discovery-token-ca-cert-hash的值:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

这是一个连接命令输出:

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

在所有其他Worker节点上运行相同的join命令,然后查看使用以下命令加入集群的可用节点:

$ kubectl get nodes

使用Ansible和Calico CNI在CentOS 7/CentOS 8上部署Kubernetes集群

 

步骤4:将Metrics Server部署到Kubernetes集群

Metrics Server是资源使用情况数据的群集范围内的聚合器,它从摘要API收集指标,该摘要API由Kubelet在每个节点上公开,使用下面的指南进行部署:

将Metrics Server部署到Kubernetes集群

至此,您现在有了一个正在运行的Kubernetes集群,可以用来开发Cloud本机应用程序。

 

相关主题

详细介绍使用Ansible来实现网络自动化

精选文章
热门文章