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:物理服务器部署的组件以及测试集群可用性(万字教程!肝!)的主要内容,如果未能解决你的问题,请参考以下文章