
kubeasz部署k8s集群实战 原创
背景
kubeasz是一个利用ansible-playbook基于二进制方式自动化部署和运维k8s集群的开源项目,目前该项目最新发布版本为3.4.1,基于该版本我们可以快速实现部署最高版本为1.25.3的k8s集群。
安装规划
K8s HA-architecture
基于kubeasz安装的k8s高可用架构方案如上。
使用kubeasz默认安装的kubernetes集群主要特性如下
- etcd集群独立于kubernetes集群
- kubernetes三大组件均二进制运行
- 各节点服务器都经过基本的性能基线设置,能满足常规的使用场景
- 使用证书有效期为100年
- 集群通过kube-lb组件实现内部高可用
- 集成安装了kubernetes-dashboard,开箱即用
服务器配置信息
服务器 | cpu | memory | disk | os |
---|---|---|---|---|
10.0.1.121 | 3c | 8g | 40g | CentOS Linux 7.9 |
10.0.1.122 | 3c | 8g | 40g | CentOS Linux 7.9 |
10.0.1.123 | 3c | 8g | 40g | CentOS Linux 7.9 |
高可用集群所需节点配置如下
角色 | 服务器 | 描述 |
---|---|---|
部署节点 | 10.0.1.121 | 作为宿主机通过kubeasz容器运行ansible/ezctl命令 |
etcd节点 | 10.0.1.121<br />10.0.1.122<br />10.0.1.123<br /> | 注意etcd集群需要1,3,5,…奇数个节点,本实战安装1个节点 |
master节点 | 10.0.1.121<br />10.0.1.122 | 高可用集群至少2个master节点,本实战安装1个节点 |
node节点 | 10.0.1.123 | 运行应用负载的节点,节点数任意,本实战安装1个节点 |
本次部署将以10.0.1.121作为宿主机通过kubeasz容器在线安装k8s集群,其中kubeasz使用即时的最新版本3.3.1。部署的k8s集群版本信息如下:
- k8s: v1.25.3
- etcd: v3.5.4
- containerd: 1.6.8
- flanal: v0.19.2
- dashboard: v2.6.1
安装部署
以下所有操作在部署节点10.0.1.121完成。
准备环境
准备脚本、二进制文件和镜像文件
./ezdown -D命令多执行几遍,直至再执行的时候提示”Action successed: download_all“为止。这样就在/etc/kubeasz目录下下载了在线安装所有需要的脚本、二进制文件和镜像文件。
另外,通过执行./ezdown -D我们会发现docker环境也在主控宿主机安装好了,这个效果即使在做非k8集群本地化交付场景的时候也特别有用。
继续执行另外两个命令./ezdown -X和./ezdown -P分别把额外容器镜像和离线文件也下载下来,这些文件也都在/etc/kubeasz。后面我们把/etc/kubeasz这个目录打个压缩包,并和ezdown文件归档在一起后续可以直接使用。
设置ssh免密登录部署服务器
启动kubeasz容器
进入kubeasz创建集群k8s-01
根据提示修改hosts如下,其中hosts文件中按规划调整了etcd、kube_master、kube_node和ex_lb四处位置的服务器IP,注意这里只能使用IP,不能使用hostname;另外CONTAINER_RUNTIME应该设置为containerd,其它配置可保持不变。本实践中的网络组件选择了flannel,NODE_PORT_RANGE调整为"30-32767"
注意:
- 生成的hosts文件里的CONTAINER_RUNTIME一定不能是docker,这个不要调整错了。
开始安装
执行一键安装,静候安装完成,显示如下就是安装好了。也可以分步安装。按照kubeasz对安装kubernetes集群的步骤拆解,一共分为7步,每一步都对应相应的安装任务,读者可以自行体验。
验证安装
登录Master10.0.1.121,我们确认下是否安装成功。
发现上面的pod不是Pending、Init就是ContainerCreating,显然有问题,可以参考如下方案解决
libseccomp-2.4.1-0.el7.x86_64.rpm传送门在这里。<br />
至此,我们的k8s集群安装验证成功。
访问kubernetes-dashboard
在验证安装过程查看所有集群svc状态的操作中,我们看到了默认安装了kubernetes-dashboard,我们可以通过NodePort访问https://{IP}可为任一节点IP。
这里我们使用chrome浏览器访问,显示如下
随便点击页面的空白处,然后输入:thisisunsafe
页面正常打开如下
从master节点查看token并使用token登录(这里为了方便,我们可以直接使用admin-user的token)
使用admin-user的token登录kubernetes-dashboard,进入后显示如下
恢复 Master 调度
默认情况下,pod 节点不会分配到 master 节点,可以通过如下命令让 master 节点恢复调度,这样后续master也可以运行pod了。
kubeasz内置了很多常用组件,包括helm、nginx-ingress、prometheus等等,读者可以自行探索,这里笔者没有用kubeasz的内置模块,而是自行安装了helm、nginx-ingress和存储(local-path)。具体安装过程记录如下
安装 helm
安装 nginx-ingress
- 下载 ingress
- 修改ingress-nginx的values.yaml
调整细节如下
- 安装
- 确认 nginx- ingress 安装是否 OK。
**用浏览器访问 ******http://10.0.1.121/,界面如下:
分别访问http://10.0.1.122/和http://10.0.1.123, 均可确认nginx-ingress已经正常安装
启用ex-lb
kubeasz集成了ex-lb,ex-lb集成了keepalived服务,这样就可以用虚拟IP来访问物理IP了,如笔者在实验中的3个节点10.0.1.121、10.0.1.122和10.0.1.123上均配置了ex-lb,虚拟IP是10.0.1.120
安装完成后,就可以用浏览器访问 http://10.0.1.120/,界面如下:
安装存储 local-path
k8s集群默认没有配置存储组件,只能使用hostPath,我们可以安装至少一个存储组件以保证支撑某些场景,这里笔者选择了local-path-provisioner。
- 下载
- 安装
- 配置 local-path 为默认存储
- 验证 local-path 安装是否 OK
