1、简介

1.1、目的

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

1.2、适用范围

linux内核版本4.19

X86ARM安装方法完全相同,本文档以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角色
armmaster60.10.20.101master节点
node160.10.20.102node1节点

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

 正常状态如下图所示

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐