k8s集群部署04:物理服务器部署的组件以及测试集群可用性(万字教程!肝!)

Posted 传智教育官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s集群部署04:物理服务器部署的组件以及测试集群可用性(万字教程!肝!)相关的知识,希望对你有一定的参考价值。

上一篇文章我们学习了k8s的集群架构,接下来需要开始部署k8s集群。点击回顾:《k8s架构03:了解应用部署架构,掌握k8s集群架构》


一、场景

先聚焦一下我们本篇内容重点:
k8s集群部署工具有什么?
需要几台物理服务器?
物理服务器硬件配置有哪些?
每台物理服务器部署什么组件?
部署结束后应该如何测试集群的可用性?

带着问题跟我继续学习。

二、学习目标

✔了解k8s的集群部署工具
✔掌握使用kubeadm部署k8s集群方法
✔掌握验证k8s集群可用性方法

三、学习步骤

在这里插入图片描述

四、课程内容

4.1 k8s集群部署工具

4.1.1 二进制源码包部署

获取源码包
部署在各节点中
启动服务

  • Master

api-server
etcd
scheduler
controller manager

  • Worker

kubelet
kube-proxy
docker

  • 生成证书

http
https

4.1.2 使用kubeadm部署

安装软件 kubelet kubeadm kubectl
初始化集群
添加node到集群中
证书自动生成
集群管理系统是以容器方式存在,容器运行在master
容器镜像是谷歌提供
阿里云下载容器镜像,需要重新打标记
谷歌下载

4.2 使用kubeadm部署kubernetes集群方法

使用kubeadm部署单Master节点k8s集群;

4.2.1 主机要求

实际生产中,适当提高硬件配置;

硬件:

在这里插入图片描述

4.2.2 主机准备

所有主机均瑶配置

主机操作系统:

在这里插入图片描述

主机名:

[root@XXX ~]# hostnamectl set-hostname XXX
主机名列表 
192.168.216.100 master1 
192.168.216.101 worker1 
192.168.216.102 worker2

主机IP地址:

IP地址段根据自己主机实际情况进行配置;
本次使用VMWare Workstation Pro虚拟机部署,需要注意网关设置。

[root@XXX ~]# cat /etc/sysconfig/network- scripts/ifcfg-ens33
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.216.XXX
NETMASK=255.255.255.0
GATEWAY=192.168.216.2
DNS1=119.29.29.29

主机名称解析:

[root@XXX ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.216.100 master1 
192.168.216.101 worker1 
192.168.216.102 worker2

主机安全配置

关闭Firewalld

[root@XXX ~]# systemctl stop firewalld
[root@XXX ~]# systemctl disable firewalld

确认是否运行
[root@XXX ~]# firewall-cmd --state 
not running

SELNUX配置

做出下属修改,一定要重启系统才可以生效

[root@XXX ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

主机时间同步

由于最小火安装系统,需要单独安装ntpdate

[root@XXX ~]# yum -y install ntpdate
[root@XXX ~]# crontab -l 
0 */1 * * * ntpdate time1.aliyun.com

永久关闭swap分区

使用kubeadm部署必须关闭swap分区,修改配置文件后需要重启操作系统。

[root@XXX ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Mar 5 11:40:13 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=2791cef9-e7dd-40cb-917c-52f8bc061339 /boot xfs defaults 0 0
#/dev/mapper/centos-swap swap swap defaults 0 0

在swap文件系统对应的行,行首添加#表示注释。

添加网桥过滤

添加网桥过滤及地址转发
[root@XXX ~]# cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

查看是否加载
[root@XXX ~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 151336 1 br_netfilter

加载网桥过滤配置文件
[root@XXX ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

开启ipvs

安装ipset及ipvsadm

[root@XXX ~]# yum -y install ipset ipvsadm

在所有节点执行如下脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 在manager节点以及worker节点安装指定版本docker-ce

4.3.1 YUM源获取

建议使用清华镜像源,官方提供的镜像源由于网络速度原因下载较慢。

[root@XXX ~]# wget -O 
/etc/yum.repos.d/docker-ce.repo 
https://mirrors.tuna.tsinghua.edu.cn/docker- 
ce/linux/centos/docker-ce.repo

4.3.2 查看docker-ce版本

对版本进行排序

[root@XXX ~]# yum list docker-ce.x86_64 -- showduplicates | sort -r

4.3.3 安装指定版本docker-ce

安装指定版本docker-ce,此版本不需要修改服务启动文件以及iptables默认规则链策略。

[root@XXX ~]# yum -y install -- setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7

4.3.4 修改docker-ce服务配置文件

修改其目的是为了后续使用/etc/docker/daemon.json来进行更多配置

修改内容如下
[root@XXX ~]# cat
/usr/lib/systemd/system/docker.service
[Unit] 
...

[Service] 
...
ExecStart=/usr/bin/dockerd #如果原文件此行后面 有-H选项,请删除-H()后面所有内容。
...

[Install]
...

注意:有些版本不需要修改,请注意观察



#在/etc/docker/daemon.json添加如下内容:
[root@localhost ~]# cat /etc/docker/daemon.json
{ 
             "exec-opts": 
["native.cgroupdriver=systemd"]
}

4.4、部署软件及配置

4.4.1 软件安装

所有k8s集群节点均需要安装,默认YUM源是谷歌,可以使用阿里云YUM

在这里插入图片描述
谷歌YUM源

在这里插入图片描述
阿里云YUM源

在这里插入图片描述
安装指定版本kubeadm kubelet kubectl

[root@XXX ~]# yum list kubeadm.x86_64 -- showduplicates | sort -r

[root@XXX ~]# yum -y install -- setopt=obsoletes=0 kubeadm-1.17.2-0 kubelet- 1.17.2-0 kubectl-1.17.2-0

4.4.2 软件设置

主要是配置kubelet ,如果不配置可能会导致k8s集群无法启动。

为了实现docker使用的cgroupdriver与kubelet使用的 cgroup的一致性,建议修改如下文件内容。
[root@XXX ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
设置为开机自启动即可,由于没有生成配置文件,集群初始化 后自动启动
[root@XXX ~]# systemctl enable kubelet 12

4.5 k8s集群容器镜像准备

由于使用kubeadm部署集群,集群所有核心组件均以Pod运行,需要为主机准备镜像,不同角色主机准备不同镜像

建议使用科学上网方式下载镜像

4.5.1 Master主机镜像

1查看集群使用的容器镜像
[root@master1 ~]# kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.17.2
k8s.gcr.io/kube-controller-manager:v1.17.2
k8s.gcr.io/kube-scheduler:v1.17.2
k8s.gcr.io/kube-proxy:v1.17.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5 

列出镜像列表到文件中,便于下载使用。
[root@master1 ~]# kubeadm config images list
>> image.list

查看已列出镜像文件列表
[root@master1 ~]# cat image.list 

编写镜像下载脚本
[root@master1 ~]# cat image.pull
#!/bin/bash
img_list='
k8s.gcr.io/kube-apiserver:v1.17.2
k8s.gcr.io/kube-controller-manager:v1.17.2
k8s.gcr.io/kube-scheduler:v1.17.2
k8s.gcr.io/kube-proxy:v1.17.2
k8s.gcr.io/pause:3.1  26 k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5 


for img in $img_list
do
32docker pull $img 
done


执镜像下载脚本
[root@master1 ~]# sh image.pull


查看已下载镜像

[root@master1 ~]# docker images
REPOSITORY	TAG
	IMAGE ID	CREATED
	SIZE
k8s.gcr.io/kube-proxy	v1.17.2
	cba2a99699bd	2 weeks ago
	116MB
k8s.gcr.io/kube-apiserver	v1.17.2
	41ef50a5f06a	2 weeks ago
	171MB
k8s.gcr.io/kube-controller-manager	v1.17.2
	da5fd66c4068	2 weeks ago
	161MB
k8s.gcr.io/kube-scheduler	v1.17.2
	f52d4c527ef2	2 weeks ago
    94.4MB
k8s.gcr.io/etcd	3.4.3-0
303ce5db0e90	3 months ago 288MB
k8s.gcr.io/coredns	1.6.2
bf261d157914	5 months ago 
    44.1MB
k8s.gcr.io/pause    3.1
            da86e6ba6ca1   2 years ago
    742kB

Worker主机镜像

1保存镜像为tar
2[root@master1 ~]# docker save -o kube- proxy.tar	k8s.gcr.io/kube-proxy:v1.17.2
3[root@master1 ~]# docker save -o pause.tar k8s.gcr.io/pause:3.1
4[root@master1 ~]# ls
5kube-proxy.tar	pause.tar 6
7复制tar到worker节点
8[root@master1 ~]# scp kube-proxy.tar pause.tar work1:/root
9
10 [root@master1 ~]# scp kube-proxy.tar pause.tar work2:/root
11
12
13在worker节点导入镜像
14[root@work1 ~]# ls
15kube-proxy.tar	pause.tar
16[root@work1 ~]# docker load -i kube- proxy.tar
17[root@work1 ~]# docker load -i pause.tar 18
19
20[root@work2 ~]# ls 
21kube-proxy.tar  pause.tar
22[root@work2 ~]# docker load -i kube-proxy.tar 
23[root@work2 ~]# docker load -i pause.tar

4.6 k8s集群初始化

在master节点操作

[root@master1 ~]# kubeadm init --kubernetes- version=v1.17.2 --pod-network- cidr=172.16.0.0/16 --apiserver-advertise- address=192.168.216.100
1初始化过程中导出结果
2 ......
3 Your Kubernetes control-plane has initialized successfully!
4
5 To start using your cluster, you need to run the following as a regular user:
6
7  mkdir -p $HOME/.kube
8   sudo cp -i /etc/kubernetes/admin.conf
$HOME/.kube/config
9sudo chown $(id -u):$(id -g)
$HOME/.kube/config
10
11You should now deploy a pod network to the cluster.
12Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
13	https://kubernetes.io/docs/concepts/cluste r-administration/addons/
14
15 Then you can join any number of worker nodes by running the following on each as root:
16
17 kubeadm join 192.168.216.100:6443 --token m0rpym.522tija0299geb8h \\
18		--discovery-token-ca-cert-hash sha256:cef7351d9fefc67868f22aa3122165dd01f63 e95870d2fb22197ee66c61b18d6

4.6.1 准备集群管理文件

[root@master1 ~]# mkdir .kube

[root@master1 ~]# cp
/etc/kubernetes/admin.conf ./.kube/config

[root@master1 ~]# chown $(id -u):$(id -g)
.kube/config

4.6.2 网络插件使用

clico 镜像准备

1[root@master1 calico39]# ls
2calico-cni.tar	calico.yml pod2daemon-flexvol.tar
3calico-node.tar	kube-controllers.tar
4[root@master1 calico39]# docker load -i calico-cni.tar
5
6 [root@master1 calico39]# docker load -i calico-node.tar
7
8 [root@master1 calico39]# docker load -i pod2daemon-flexvol.tar
9
10[root@master1 calico39]# docker load -i
kube-controllers.tar
11
12[root@master1 calico39]# docker images
13REPOSITORY          TAG
              IMAGE ID  CREATED
           SIZE
14
15calico/node                       v3.9.0
                f9d62fb5edb1      7 weeks ago
         190MB  
16calico/pod2daemon-flexvol         v3.9.0
                aa79ce3237eb     7  weeks ago 
17calico/cni
               56c7969ed8e6 
          160MB
18calico/kube-controllers            v3.9.0
               f5cc48269a09       7  weeks ago 
           50.4MB
19
20

修改calico资源清单文件

在这里插入图片描述

应用calico资源清单文件

在应用caclico资源清单文件之前,需要把calico所有镜像导入到node的节点中

在这里插入图片描述

1 输出结果
2configmap/calico-config created
3customresourcedefinition.apiextensions.k8s.i o/felixconfigurations.crd.projectcalico.org created
4customresourcedefinition.apiextensions.k8s.i o/ipamblocks.crd.projectcalico.org created
5customresourcedefinition.apiextensions.k8s.i o/blockaffinities.crd.projectcalico.org created
6customresourcedefinition.apiextensions.k8s.i o/ipamhandles.crd.projectcalico.org created
7customresourcedefinition.apiextensions.k8s.i o/ipamconfigs.crd.projectcalico.org created
8customresourcedefinition.apiextensions.k8s.i o/bgppeers.crd.projectcalico.org created
9customresourcedefinition.apiextensions.k8s.i o/bgpconfigurations.crd.projectcalico.org created
10customresourcedefinition.apiextensions.k8s.i o/ippools.crd.projectcalico.org created
11customresourcedefinition.apiextensions.k8s.i o/hostendpoints.crd.projectcalico.org  created
12customresourcedefinition.apiextensions.k8s.i o/clusterinformations.crd.projectcalico.org created
13customresourcedefinition.apiextensions.k8s.i o/globalnetworkpolicies.crd.projectcalico.or g created
14customresourcedefinition.apiextensions.k8s.i o/globalnetworksets.crd.projectcalico.org created

15customresourcedefinition.apiextensions.k8s.i o/networkpolicies.crd.projectcalico.org created
16customresourcedefinition.apiextensions.k8s.i o/networksets.crd.projectcalico.org created
17clusterrole.rbac.authorization.k8s.io/calico
-kube-controllers created
18clusterrolebinding.rbac.authorization.k8s.io
/calico-kube-controllers created
19clusterrole.rbac.authorization.k8s.io/calico
-node created
20clusterrolebinding.rbac.authorization.k8s.io
/calico-node created
21daemonset.apps/calico-node created
22serviceaccount/calico-node created
23deployment.apps/calico-kube-controllers created
24serviceaccount/calico-kube-controllers created

4.6.3 添加工作节点到集群

在这里插入图片描述
在这里插入图片描述

4.7 验证k8s集群可用性方法

在这里插入图片描述

五、学习总结

在这里插入图片描述

注意!

需要上述文章源码的小伙伴!有邮箱私信都可以~

以上是关于k8s集群部署04:物理服务器部署的组件以及测试集群可用性(万字教程!肝!)的主要内容,如果未能解决你的问题,请参考以下文章

Ceph高可用部署和主要组件介绍

k8s部署zk集群

k8s部署mongo集群

k8s部署---master节点组件部署

k8s kubeadm部署高可用集群

信也容器云揭秘04-K8S集群稳定性保障