文章目录
- 前言
- 一、环境准备
- 1.主机操作系统说明
- 2.主机硬件配置
- 3.ansible-playbook相关目录准备
- 4.下载离线部署包
- 4.1. 下载kubeclt、kubeam、kubelet RPM包
- 4.2. 下载docker安装包
- 4.3. 下载containerd安装包
- 4.4. 镜像包下载
- 二、部署流程
- 三、部署过程
- 1.修改hosts文件
- 2.部署单master集群
- 3. 部署结果验证
- 四、部分yaml文件下载地址
- 总结
前言
由于这是TO/G项目,当前环境中广泛使用的是CentOS 7操作系统。根据最新出台的相关政策要求,必须对现有的CentOS 7系统进行替换。甲方首选的操作系统为国产麒麟操作系统,这一决策不仅符合政策规定,也有助于推进信息技术领域的自主可控和国产化替代。因为也是首次使用麒麟操作系统。因节前适配机器无法申请,只能先在本地vmware中进行k8s1.28适配工作
本篇文章主要以离线部署为主,没有过多的介绍每个roles目录下编写的剧本文件,如果您需要该安装包及部署包讲解,请私信我一一为你解答
本次k8s.128离线安装适配麒麟操作系统的操作由ansible-playbook剧本实现
一、环境准备
1.主机操作系统说明
操作系统版本 | 主机数量 |
---|---|
Kylin V10 SP2 x86_64 | 3 |
2.主机硬件配置
因本地机器资源有限,因此部署1master+1node节点
ip | cpu | mem | disk | role | hostname | 安装组件 |
---|---|---|---|---|---|---|
192.168.56.100 | 1 | 1 | 20+20 | ops | ops | ansible、通外网下载各种离线包 |
192.168.56.101 | 2 | 4 | 20+20 | master | k8s-master | apiserver、controller-manager、schedule、kubelet、etcd、kube-proxy、containerd、flannel、kubeadm、kubectl、harbor、docker-compose、docker、ingress-nginx |
192.168.56.102 | 2 | 4 | 20+20 | node | k8s-node | Kube-proxy、flannel、containerd、kubelet |
3.ansible-playbook相关目录准备
ssh 192.168.56.100
[root@ops ops]# mkdir -p /data/ops/k8s/ #存放yml剧本文件、hosts文件等
#并没有使用ansible默认的hosts文件、配置文件
[root@ops k8s]# ll
total 1512536
-rw-r--r-- 1 root root 19461 Jun 22 2021 ansible.cfg ----> ansible配置文件
-rw-r--r-- 1 root root 1989766 Jan 12 21:43 ansible.log ----> 执行安装的日志
drwxr-xr-x 2 root root 72 Jan 9 22:00 gfacts_cache ----> 收集到的信息
drwxr-xr-x 2 root root 6 Oct 25 2022 global_vars ----> 全局变量目录(未使用道)
drwxr-xr-x 2 root root 6 Oct 25 2022 group_vars ----> 全局组变量目录(未使用道)
-rw-r--r-- 1 root root 527 Jan 12 21:21 hosts ----> 单master部署的hosts文件
-rw-r--r-- 1 root root 158 Oct 15 2021 hosts_add_node ----> 新增节点的hosts文件
-rw-r--r-- 1 root root 1181 Feb 17 2022 hosts_ha ----> 高可用部署的hosts文件
-rw-r--r-- 1 root root 231 Jun 22 2021 hosts_haproxy ----> 适用于多主多从
-rw-r--r-- 1 root root 95 Jun 22 2021 hosts_harbor ----> 适用于单独部署harbor的hosts文件
-rw-r--r-- 1 root root 138 Jun 22 2021 hosts_keepalive ----> 适用于多主多从
drwxr-xr-x 2 root root 205 Jan 12 21:20 playbook ----> 入口yml文件存放处,调用相关roles
-rw-r--r-- 1 root root 3189 Oct 15 2021 Readme.md ----> 帮助手册
drwxr-xr-x 32 root root 4096 Jan 9 18:16 roles ----> 真正执行部署的yml文件
roles目录展示
所有roles目录遵循以下目录示例
[root@ops containerd]# ll
total 0
drwxr-xr-x 2 root root 22 Oct 15 2021 defaults
drwxr-xr-x 2 root root 38 Jan 12 18:06 files ----> 存放tar.gz包(该包中存储的是对应roles的所需包,二进制tar包、脚本、rpm包、镜像包)
drwxr-xr-x 2 root root 6 Oct 25 2022 handlers ----> 触发器目录,结合tasks目录使用
drwxr-xr-x 2 root root 6 Oct 25 2022 meta
drwxr-xr-x 2 root root 22 Jan 12 16:13 tasks ----> 主要执行入口及执行方式
drwxr-xr-x 2 root root 6 Oct 25 2022 templates ----> jinjia2模板,用于存放相关配置文件
drwxr-xr-x 2 root root 6 Oct 25 2022 vars ----> roles依赖的变量目录文件
playbook目录展示
该目录下存放的是部署单节点、多节点、harbor、haproxy、新增节点的剧本文件
[root@ops playbook]# ll
total 32
-rw-r--r-- 1 root root 618 Oct 25 2022 add_node.yml ----> 新增节点的入口文件
-rw-r--r-- 1 root root 178 Oct 15 2021 haproxy.yml ----> 部署harproxy入口文件
-rw-r--r-- 1 root root 323 Jun 22 2021 harbor.yml ----> 单独部署harbor入口文件
-rw-r--r-- 1 root root 190 Jun 22 2021 keepalive.yml
-rw-r--r-- 1 root root 1584 Jul 7 2022 kubernetes-ha.yml ----> 多节点
-rw-r--r-- 1 root root 80 Jan 9 23:17 kubernetes-single-test.yml
-rw-r--r-- 1 root root 1487 Jan 11 11:10 kubernetes-single.yml ----> 单节点
4.下载离线部署包
ssh 192.168.56.100
4.1. 下载kubeclt、kubeam、kubelet RPM包
#配置阿里源 下载组件rpm包
[root@ops kube]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[root@ops kube]# yum -y install kubelet-1.28.2 kubectl-1.28.2 kubeadm-1.28.2 --downlodonly --downloadir=./
[root@ops kube]# pwd
/data/ops/k8s/roles/kube-bin/files/kube
#rpm包如下所示
[root@ops kube]# ls
3f5ba2b53701ac9102ea7c7ab2ca6616a8cd5966591a77577585fde1c434ef74-cri-tools-1.26.0-0.x86_64.rpm
a24e42254b5a14b67b58c4633d29c27370c28ed6796a80c455a65acc813ff374-kubectl-1.28.2-0.x86_64.rpm
cee73f8035d734e86f722f77f1bf4e7d643e78d36646fd000148deb8af98b61c-kubeadm-1.28.2-0.x86_64.rpm
conntrack-tools-1.4.6-2.ky10.x86_64.rpm
conntrack-tools-help-1.4.6-2.ky10.noarch.rpm
e1cae938e231bffa3618f5934a096bd85372ee9b1293081f5682a22fe873add8-kubelet-1.28.2-0.x86_64.rpm
libnetfilter_cthelper-1.0.0-15.ky10.x86_64.rpm
libnetfilter_cttimeout-1.0.0-13.ky10.x86_64.rpm
libnetfilter_queue-1.0.5-1.ky10.x86_64.rpm
socat-1.7.3.2-8.ky10.x86_64.rpm
#安装脚本
install.sh
yum install *.rpm -y
sed -i 's#^KUBELET_EXTRA_ARGS=.*#KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"#g' /etc/sysconfig/kubelet
systemctl daemon-reload
systemctl start kubelet
systemctl enable kubelet
4.2. 下载docker安装包
[root@ops files]# ls
docker-ce-19.03.13.tar.gz
[root@ops files]# pwd
/data/ops/k8s/roles/docker-ce/files
[root@ops files]# wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.13.tgz
[root@ops docker]# ll
total 60776
-rwxr-xr-x 1 root root 197 Oct 22 2021 daemon.json
-rw-r--r-- 1 root root 62219270 Jan 10 10:29 docker-19.03.13.tgz
-rwxr-xr-x 1 root root 472 Jan 12 14:40 docker.service
-rwxr-xr-x 1 root root 341 Jan 12 14:33 install.sh
[root@ops files]# vim docker/install.sh
#!/bin/bash
cd /root/docker
tar xf docker-19.03.13.tgz
mv docker/* /usr/local/bin/
sleep 2
mkdir /export/docker/
cp -rp /root/docker/daemon.json /etc/docker/daemon.json
cp -rp /root/docker/docker.service /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
systemctl status docker
systemctl enable docker
4.3. 下载containerd安装包
[root@ops containerd]# wget https://github.com/containerd/containerd/releases/download/v1.6.27/containerd-1.6.27-linux-amd64.tar.gz
[root@ops containerd]# wget https://github.com/opencontainers/runc/releases/download/v1.2.4/runc.amd64
[root@ops containerd]# pwd
/data/ops/k8s/roles/containerd/files/containerd
[root@ops containerd]# ll
total 55164
-rwxr-xr-x 1 root root 8932 Jan 12 18:05 config.toml
-rw-r--r-- 1 root root 45780803 Jan 12 14:27 containerd-1.6.27-linux-amd64.tar.gz
-rwxr-xr-x 1 root root 1258 Jan 10 10:46 containerd.service
-rwxr-xr-x 1 root root 631 Jan 12 16:08 install.sh
-rw-r--r-- 1 root root 10684992 Jan 12 14:26 runc.amd64
[root@ops containerd]# vim install.sh
#!/bin/bash
cd /root/containerd
install -m 755 runc.amd64 /usr/bin/runc
tar xf containerd-1.6.27-linux-amd64.tar.gz
cp -rp bin/* /usr/bin/
cp -rp containerd.service /usr/lib/systemd/system/
sleep 2
mkdir -p /etc/containerd
mkdir -p /export/containerd
cp -rp config.toml /etc/containerd/
chmod +x /etc/containerd/config.toml
sed -i '/root =/s#/var/lib/containerd#/export/containerd#' /etc/containerd/config.toml
sed -i 's#"registry.k8s.io/pause:3.9"#"harbor.jdicity.local/registry/pause:3.9"#g' /etc/containerd/config.toml
systemctl daemon-reload
systemctl start containerd
systemctl status containerd
systemctl enable containerd
4.4. 镜像包下载
主要的镜像
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-apiserver:v1.28.15
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-apiserver:v1.28.15 registry.k8s.io/kube-apiserver:v1.28.15
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-controller-manager:v1.28.15
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-controller-manager:v1.28.15 registry.k8s.io/kube-controller-manager:v1.28.15
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-scheduler:v1.28.15
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-scheduler:v1.28.15 registry.k8s.io/kube-scheduler:v1.28.15
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-proxy:v1.28.15
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-proxy:v1.28.15 registry.k8s.io/kube-proxy:v1.28.15
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/brancz/kube-rbac-proxy:v0.18.0
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/brancz/kube-rbac-proxy:v0.18.0 quay.io/brancz/kube-rbac-proxy:v0.18.0
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.9
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.9 registry.k8s.io/pause:3.9
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/coredns/coredns:v1.10.1
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/coredns/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/etcd:3.5.9-0
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/etcd:3.5.9-0 registry.k8s.io/etcd:3.5.9-0
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.25.1
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.25.1 docker.io/flannel/flannel:v0.25.1
ctr images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1
ctr images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1 docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1
详细的roles目录中的yml就不展开分析了,太多了,如果需要ansible形式的安装包,请私信我即可
二、部署流程
部署过程都要执行的操作:
第一大部分:
1、服务器初始化---->roles---->common
关闭selinux
设置服务器时间
优化内核参数
优化服务器参数
关闭服务器默认的服务(firewalld等)
设置主机名
挂载数据盘
设置免密
设置/etc/hosts文件解析
2、安装kubectl、kubeadm、kubelet---->roles---->kube-bin
3、安装containerd---->roles---->containerd
设置harbor仓库地址、用户名、密码
打开systemdGroup
启动containerd
第二大部分:
1、安装harbor---->roles---->{docker-ce、docker-compose、harbor-ssl、harbor}
安装docker
安装docker-compose
设置harbor证书
拷贝harbor镜像并启动harbor
第三大部分:
1、master节点---->roles---->{k8s-master}
1、拷贝master节点所需的镜像包并通过ctr image import导入镜像到master节点
2、调用harboe接口创建项目
3、给导入的镜像打标签(tag),然后通过ctr image pull 推送镜像到harbor仓库
2、node节点---->roles---->{k8s-node}
1、拷贝node节点所需的镜像包并通过ctr image import导入镜像到node节点
2、给导入的镜像打标签(tag),然后通过ctr image pull 推送镜像到harbor仓库
3、初始化集群---->roles---->{kubeadm-single、kubeadm-shell-single}
1、拷贝初始化yaml文件至master节点
2、执行初始化集群命令 kubeadm init --config init.default.yaml --upload-certs --v=5
3、创建节点加入集群的指令
4、node节点加入集群---->roles---->{kubeadm-node}
5、更新集群参数---->roles---->{upgrade-parameter}
7、部署flannel、ingress-nginx、coredns---->roles---->{add-on}
三、部署过程
1.修改hosts文件
代码如下(示例):
[all_hosts]
192.168.56.100 hostname=ops.local ansible_ssh_user=root ansible_ssh_pass="xxx"
192.168.56.101 hostname=k8s-master.local ansible_ssh_user=root ansible_ssh_pass="xxxx907"
192.168.56.102 hostname=k8s-node.local ansible_ssh_user=root ansible_ssh_pass="xxwncq6"
[k8s_master]
192.168.56.101
[k8s_node]
192.168.56.102
[install]
192.168.56.100
[harbor]
192.168.56.101
[all:vars]
domain_name=harbor.ops.local ----> harbor镜像域名
project_name=registry ----> harbor仓库名称,用于存储k8s集群的镜像
harbor_user=admin ----> harbor仓库用户名
harbor_pwd=nRt87ccD&H*T%4WG ----> harbor仓库密码
2.部署单master集群
代码如下(示例):
[root@ops k8s]# ansible-playbook -i hosts playbook/kubernetes-single.yml
部署过程中的部分日志
3. 部署结果验证
[root@k8s-master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master.ops.local Ready control-plane 16h v1.28.2
k8s-node.ops.local Ready <none> 16h v1.28.2
至此,通过ansible-playbook离线部署k8s1.28版本到麒麟V10系统完成
四、部分yaml文件下载地址
flannel.yml
[root@ops k8s]# wget https://github.com/flannel-io/flannel/releases/download/v0.25.1/kube-flannel.yml
ingress-nginx.yml
[root@ops k8s]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.6/deploy/static/provider/baremetal/deploy.yaml
总结
因为本篇离线部署是通过ansible部署的,涉及到了很多roles中的yml编写,等价于将kubeadm手动部署方式通过自动化运维工具实现代替,因此再使用本部署包前先熟练的掌握kubeadm部署方式。因此本篇文章没有针对每个roles进行分享,主要是太多了,请谅解。还有就是离线部署再工具包准备阶段繁琐,需要将依赖包找全并测试通过,这样才能交付出一套完美的部署包。本安装包适用于麒麟V10 SP2 x86_64系统,可以实现单master、多master一键离线部署。