X86/ARM架构Centos内部署Docker+Kubernetes
信创环境下docke+k8s安装部署及一些基础配置,对于国产化linux适配已经经过验证,文内有安装包地址
1、简介
1.1、目的
传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。
1.2、适用范围
linux内核版本4.19
X86与ARM安装方法完全相同,本文档以X86环境演示安装过程
2、Docker+Kubernetes
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
2.1、安装准备
2.1.1、离线安装包名称
X86:k8s-x86-0519-install-1.zip
链接:https://pan.baidu.com/s/1ZlVfKVAK_sgzgVJbkXQvMw?pwd=83ro
提取码:83ro
ARM:k8s-arm-0519-install-1.zip
链接:https://pan.baidu.com/s/1w-ZmmvKKgwKpj8Bmwa5D3Q?pwd=7py9
提取码:7py9
3、安装过程
3.1、环境配置
3.1.1、系统环境
主机名 | IP | 角色 |
armmaster | 60.10.20.101 | master节点 |
node1 | 60.10.20.102 | node1节点 |
3.1.2、关闭防火墙
两台服务器操作:
systemctl stop firewalld
systemctl disable firewalld
3.1.3、关闭强访
两台服务器操作:
sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config
sed -i 's/^SELINUXTYPE=.*/SELINUXTYPE=disabled/g' /etc/selinux/config
grep --color=auto '^SELINUX' /etc/selinux/config
结果显示:
SELINUX=disabled
SELINUXTYPE=disabled
然后重启服务器,设置生效。
3.1.4、禁用swap
两台服务器操作:
swapoff -a
上述命令机器重启后失效,若要服务器重启后也能自动禁用swap,需要修改/etc/fstab文件
vi /etc/fstab 把swap那行注释掉
3.1.5、设置主机名
Master节点:
hostnamectl set-hostname master
Node1节点:
hostnamectl set-hostname node1
两台服务器操作:
添加主机名与IP的对应关系:
vi /etc/hosts
60.10.20.101 master
60.10.20.102 node1
3.1.6、设置内核
两台服务器操作:
添加网桥过滤及地址转发,创建配置文件:
vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
使上述设置生效:
sysctl --system
加载br_netfilter模块
modprobe br_netfilter
3.1.7、同步时间
Master主机作为时间同步服务器:
安装chrony服务:
yum -y install chrony
编辑配置文件:
vi /etc/chrony.conf
pool 2.centos.pool.ntp.org iburst // 将此行注释掉
新增两行(ip地址替换为master主机地址):
server 60.10.20.101 //这里设定同步时间的ip
allow 60.10.20.0/24 //此处根据本机情况
local stratum 10 //将注释去掉,当互联网无法连接,仍可为客户端提供时间同步服务
重启服务:
systemctl restart chronyd
Node主机作为时间同步客户端:
安装chrony服务:
yum -y install chrony
编辑配置文件:
vi /etc/chrony.conf
pool 2.centos.pool.ntp.org iburst // 注释掉
新增(ip地址替换为master主机地址):
server 60.10.20.101 iburst
重启服务:
systemctl restart chronyd
确认同步成功:
chronyc sources -v
如图所示:
3.2、部署K8S-Master节点
本小节操作均在master节点完成
3.2.1、安装Docker
3.2.1.1、安装docker
yum install docker-ce docker-ce-cli containerd.io
3.2.1.2、设置docker开机自启
systemctl enable docker.service
3.2.1.3、启动docker服务
systemctl start docker
3.2.1.4、验证docker安装成功
docker --version
如图所示:
3.2.2、kubectl、kubelet、kubeadm
3.2.2.1、安装过程
yum install conntrack socat -y
将k8s压缩包上传到服务器上,然后解压:
unzip k8s-x86-0519-install-1.zip
cd k8s-x86-0519-install-1/
安装rpm包
cd /root/k8s/k8s-x86-0519-install-1/k8s-x86-0519-install-1/k8s-rpm
yum install -y *.rpm
3.2.2.2、上传镜像
cd /root/k8s/k8s-x86-0519-install-1/k8s-x86-0519-install-1/k8s-images
for i in `ls`;do docker load < $i ; done
3.2.2.3、初始化k8s集群
systemctl enable kubelet.service
kubeadm init --kubernetes-version=1.20.0 \
--apiserver-advertise-address=此处为master节点ip \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.10.0.0/16 --pod-network-cidr=172.17.0.1/16
注1:执行完成后,出现如上显示,则初始化成功。记录下最后一段的 kubeadm join 命令,后续添加node节点需要执行
然后,导入环境变量
备注:每次新打开一个终端都需要执行
export KUBECONFIG=/etc/kubernetes/admin.conf
3.2.2.4、创建网络
calico网络:
cd /root/k8s/k8s-x86-0519-install-1/k8s-x86-0519-install-1/calico
kubectl apply -f calico.yaml
安装监控插件
cd /root/k8s/k8s-x86-0519-install-1/k8s-x86-0519-install-1/lens-monitor
sh yml-apply.sh
安装calico网络后,pod都为running状态(需要等待几分钟):
kubectl get pod -A
如下图:
3.2.2.5、设置kube-controller
/etc/kubernetes/manifests/kube-controller-manager.yaml
/etc/kubernetes/manifests/kube-scheduler.yaml
上述两个文件中,行首加#注释掉- --port=0所在行,例如下所示:
3.2.2.6、清空iptables规则
systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl restart kubelet
systemctl restart docker
注意:清空iptables相关过滤规则,否则corends因为连不上kube-apiserver一直重启
3.2.2.7、验证master节点部署完成
(1)查看pod,均为running状态:
kubectl get pods --all-namespaces
注意:如果上述存在不为running状态的,可以重启服务器,排除环境因素
(2)查看节点状态,master节点为 Ready:
kubectl get node
3.3、部署K8S-Node节点
本小节操作均在node节点完成
3.3.1、安装docker
同master节点
3.3.2、安装kubectl、kubelet、kubeadm
同master节点
3.3.3、上传镜像
同master节点
3.3.4、加入Node节点
kubeadm join 60.10.20.101:6443 --token if6evj.s0ghvccz0vt2mvlw --discovery-token-ca-cert-hash sha256:884c0459cfc6c4fa26e369e7f6bbbab9785eeae93abe10ebaf785d9b65e941e0 --ignore-preflight-errors=all
备注:此命令为初始化k8smaster节点后,最后一段生成的命令此处因文件设置原因需要避免docker版本问题故在生成的命令后面添加--ignore-preflight-errors=all,避免因docker版本产生报错
3.3.5、配置kubectl
(1)将master节点下的环境变量文件拷贝到node节点上
scp -r root@60.10.20.101:/etc/kubernetes/admin.conf /etc/kubernetes
(2)导入环境变量
备注:每次新打开一个终端都需要执行
export KUBECONFIG=/etc/kubernetes/admin.conf
3.3.6、验证node节点部署完成
查看pod状态,均为running状态(需要等待几分钟),且能看到分别在master和node节点上运行的pod:
kubectl get pods --all-namespaces -o wide
如图所示:
4、查看集群健康状态
4.1、查看node状态
kubectl get node
4.2、查看集群健康状况
kubectl get cs
正常状态如下图所示
更多推荐
所有评论(0)