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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


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

文章目录

  • ​​一、场景​​
  • ​​二、学习目标​​
  • ​​三、学习步骤​​
  • ​​四、课程内容​​
  • ​​4.1 k8s集群部署工具​​
  • ​​4.1.1 二进制源码包部署​​
  • ​​4.1.2 使用kubeadm部署​​
  • ​​4.2 使用kubeadm部署kubernetes集群方法​​
  • ​​4.2.1 主机要求​​
  • ​​4.2.2 主机准备​​
  • ​​**主机操作系统:**​​
  • ​​**主机名:**​​
  • ​​**主机IP地址:**​​
  • ​​**主机名称解析:**​​
  • ​​**主机安全配置**​​
  • ​​SELNUX配置​​
  • ​​主机时间同步​​
  • ​​永久关闭swap分区​​
  • ​​添加网桥过滤​​
  • ​​开启ipvs​​
  • ​​在所有节点执行如下脚本​​
  • ​​4.3 在manager节点以及worker节点安装指定版本docker-ce​​
  • ​​4.3.1 YUM源获取​​
  • ​​4.3.2 查看docker-ce版本​​
  • ​​4.3.3 安装指定版本docker-ce​​
  • ​​4.3.4 修改docker-ce服务配置文件​​
  • ​​4.4、部署软件及配置​​
  • ​​4.4.1 软件安装​​
  • ​​4.4.2 软件设置​​
  • ​​4.5 k8s集群容器镜像准备​​
  • ​​4.5.1 Master主机镜像​​
  • ​​4.6 k8s集群初始化​​
  • ​​4.6.1 准备集群管理文件​​
  • ​​4.6.2 网络插件使用​​
  • ​​clico 镜像准备​​
  • ​​修改calico资源清单文件​​
  • ​​应用calico资源清单文件​​
  • ​​4.6.3 添加工作节点到集群​​
  • ​​4.7 验证k8s集群可用性方法​​
  • ​​五、学习总结​​
  • ​​注意!​​

一、场景

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

带着问题跟我继续学习。

二、学习目标

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

三、学习步骤

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

四、课程内容

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 主机要求

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

硬件:

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

4.2.2 主机准备

所有主机均瑶配置

主机操作系统:

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

主机名:
[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
在所有节点执行如下脚本

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


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


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

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

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


谷歌YUM源

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


阿里云YUM源

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


安装指定版本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资源清单文件

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

应用calico资源清单文件

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

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

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 添加工作节点到集群

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


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

4.7 验证k8s集群可用性方法

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

五、学习总结

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

注意!

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


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s服务器