提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


一、帖子相关说明
1,如有侵权,联系删除

视频来源中途更新过,为第三方up主上传的。请支持正版。

2,帖子参考传智播客的教程帖子 :传智播客k8s视频教程
3,原视频是以centos7来搭建的集群
4,本帖实现跨系统k8s集群的搭建
5,里面需要的资料,以及各部分需要科学上网拿到的种镜像文件,因为下载不方便,我这边单独下载了整理了下

其中文档只保留了需要的部分,附百度云盘的链接:资料提取地址 提取码:uh9y
失效请发私信补发。

tips:我这边作为复习把部署k8s集群中踩得坑补一下,流程和视频中一致,另外附加对Ubuntu系统的部署的一些命令说明和同步centos命令的修改。

6,环境需要外网支撑,进行软件包下载
二、环境说明
1,集群环境(虚拟机环境)

master1:Centos7 , ip:192.168.4.200 , hostname:master1 , cpu:2 , 内存:2G,存储:50G
worker1:Centos7 , ip:192.168.4.201 , hostname:worker1 , cpu:2,内存2G,存储:50G
worker2:Ubuntu16 , ip:192.168.4.202 , hostname:worker2 , cpu:2,内存2G,存储:50G

2,连接工具,传输文件工具

连接工具使用校园版xshell,服务器间的数据传送使用校园版xftp

2,数据持久化软件

集群使用NFS作为数据持久化

3,网络插件

集群使用Calico(不懂先忽略,或查看帖子开始附的视频)作为网络插件

三、集群搭建准备
1,配置服务器对应IP

查看网卡,centos和Ubuntu都可以通过ip addr命令来查看
在这里插入图片描述
因为使用的虚拟机,所以网卡都是ens33,下面修改对应的网卡
centos7下,修改 /etc/sysconfig/network-scripts/ifcfg-ens33
在这里插入图片描述
其中master1的配置如下,worker1可以参考配置

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #设置静态ip
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="decc3277-20b0-4b54-a2c7-07fccf71be8d"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.4.200   #ip地址
NETMASK=255.255.255.0  #子网掩码
GATEWAY=192.168.4.1    #网关
DNS1=8.8.8.8           #dns1
DNS2=114.114.114       #dns2

Ubuntu下修改 /etc/network/interfaces,添加截图中的部分:在这里插入图片描述

user@ubuntu:~$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto ens33  #网卡名
iface ens33 inet static   #设置为静态
address 192.168.4.202     #ip地址
netmask 255.255.255.0     #子网掩码
gateway 192.168.4.1       #网关
dns-nameserver 114.114.114.114 #dns

修改

2,设置hostname

centos和ubuntu设置hostname都使用hostnamectl set-hostname XXX这条命令实现
在这里插入图片描述

其中在设置ubuntu的hostname如果不是root用户,需要认证,输入当前用户密码即可。

// master1
[root@localhost ~]# hostnamectl set-hostname master1
[root@localhost ~]# hostname
master1
[root@localhost ~]# 
// worker1
[root@localhost ~]# hostnamectl set-hostname worker1
[root@localhost ~]# hostname
worker1
[root@localhost ~]# 
// worker2
root@worker2:/home/user# hostnamectl set-hostname worker2
root@worker2:/home/user# hostname
worker2
root@worker2:/home/user# 

设置完成hostname之后,需要同步hosts文件的配置,修改 /etc/hosts文件

// 在三台机器下末尾追加如下信息:
192.168.4.200 master1 
192.168.4.201 worker1 
192.168.4.202 worker2 
//保存退出,测试是否完成
//三台机器执行ping测试,如果正常,则配置完成
[root@localhost ~]# ping master1
PING master1 (192.168.4.200) 56(84) bytes of data.
64 bytes from master1 (192.168.4.200): icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from master1 (192.168.4.200): icmp_seq=2 ttl=64 time=0.119 ms
64 bytes from master1 (192.168.4.200): icmp_seq=3 ttl=64 time=0.078 ms
64 bytes from master1 (192.168.4.200): icmp_seq=4 ttl=64 time=0.038 ms
^C
--- master1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.038/0.074/0.119/0.030 ms
[root@localhost ~]# 
3,关闭防火墙

默认情况下,ubuntu系统下是无firewalld的,因此只需要关闭centos的防火墙就可以,在master1和worker1节点下,执行如下两条命令:

// 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
// 从开机自启中移除
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# 
4,SELINUX配置(需重启)

默认情况下,ubuntu系统是没有安装SELINUX的,因此只需要关闭centos的SELINUX即可,在master1和worker1节点进行确认和关闭

// 查看SELINUX状态
[root@localhost ~]# getenforce
Enforcing

如果是Enforcing状态则需要关闭

[root@localhost ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@localhost ~]# reboot
// 修改完成之后需要重启才会生效
[root@master1 ~]# getenforce
Disabled
[root@master1 ~]# 
// 重启之后SELINUX为关闭状态
5,时间同步

同步使用aptdate来实现
master1和worker1节点安装nptdate

[root@master1 ~]# yum -y install ntpdate

worker2节点安装nptdate

root@worker2:/home/user# apt-get install ntpdate

三台节点下手动同步

[root@master1 ~]# ntpdate time1.ailiyun.com
18 Nov 19:23:28 ntpdate[16386]: no server suitable for synchronization found

master1和worker1下配置自动同步,

[root@master1 ~]# crontab -e
插入如下内容:
0 */1 * * * ntpdate time1.aliyun.com
保存退出,可以查看到配置的定时任务
[root@master1 ~]# crontab -l
0 */1 * * * ntpdate time1.aliyun.com
[root@master1 ~]# 

worker2节点配置自动同步
输入命令:crontab -e 添加计划任务
第一次会让你选择编译器,如果选错编译器了要更改编译器 输入 select-editor 重新选择,建议选择vim来操作

root@worker2:/home/user# select-editor

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 

选择vim之后,回车,直接进行编辑尾行追加 0 */1 * * * ntpdate time1.aliyun.com
修改完成之后需要重启服务

root@worker2:/home/user# systemctl restart cron
6,关闭swap分区(需重启)

使用kubeadm部署k8s集群必须关闭swap分区,否则会报错

// 检查是否开启swap分区,swap一行有数据则代表swap使用中
[root@master1 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         111        1431           9         276        1533
Swap:          2047           0        2047
[root@master1 ~]# 

master1和worker1节点关闭方法,在swap文件系统对应行,行首添加#注释,然后重启即可。
在这里插入图片描述
worker2节点关闭方式,首先需要执行关闭命令

root@worker2:/home/user# sudo swapoff -a

然后需要和centos一样,修改 /etc/fstab文件,注释掉swap文件系统对应行,修改完成保存重启

在这里插入图片描述
重启之后,ubuntu系统需再次执行关闭命令,即可完成关闭swap分区,

root@worker2:/home/user# sudo swapoff -a
// 在三台节点上检查是否关闭,如果swap一行为0,则表示关闭成功
[root@master1 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819         115        1514           9         189        1530
Swap:             0           0           0

7,添加过滤网桥

在三台节点添加过滤网桥,创建 /etc/sysctl.d/k8s.conf文件并添加如下内容

[root@master1 ~]# 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@master1 ~]# 

加载模块并检查是否加载成功

[root@master1 ~]# modprobe br_netfilter
[root@master1 ~]# lsmod | grep br_netfilter
br_netfilter           22256  0 
bridge                151336  1 br_netfilter
[root@master1 ~]#

让配置文件在内核中生效,加载网桥过滤配置文件

[root@master1 ~]#  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
[root@master1 ~]# 
8,开启IPVS

master1和worker1节点安装 ipset ipvsadn

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

worker2节点安装 ipset ipvsadn

root@worker2:/home/user# apt-get install ipset ipvsadm

在所有节点添加下面的文件,并追加内容,worker2节点没有对应的路径文件夹,手动创建即可。

[root@master1 modules]# vi /etc/sysconfig/modules/ipvs.modules 
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack_ipv4 

修改文件执行权限

[root@master1 modules]# chmod 755 /etc/sysconfig/modules/ipvs.modules

执行文件

[root@master1 modules]# bash /etc/sysconfig/modules/ipvs.modules

检查是否加载

[root@master1 modules]# lsmod | grep -e ipvs -e nf_conntrack_ipv4
nf_conntrack_ipv4      15053  0 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
nf_conntrack          133095  2 ip_vs,nf_conntrack_ipv4
[root@master1 modules]# 
四、安装指定版本docker-ce(所有节点)
1,配置yum源

master1和worker1节点配置yum源,worker2节点的配置在安装docker部分一并描述

[root@master1 modules]# curl -f sSL https://get.docker.com/ | sh -s -- --mirror AzureChinaCloudd
2,安装指定版本的docker-ce

master1和worker1节点安装docker
查看docker包

[root@master1 modules]# yum list docker-ce.x86_64 -- showduplicates | sort -r
 * updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
 * extras: mirrors.aliyun.com
docker-ce.x86_64                3:19.03.13-3.el7                docker-ce-stable
 * base: mirrors.163.com
Available Packages
[root@master1 modules]# yum list docker-ce.x86_64 -- showduplicates | sort -r
 * updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
 * extras: mirrors.aliyun.com
docker-ce.x86_64                3:19.03.13-3.el7                docker-ce-stable
 * base: mirrors.163.com
Available Packages
[root@master1 modules]# 

安装指定版本docker

[root@master1 modules]# yum -y install -- setopt=obsoletes=0 docker-ce-19.03.13-3.el7

启动服务,将服务设置开机自启,并查看版本信息

[root@master1 modules]# systemctl start docker
[root@master1 modules]# systemctl enable docker
[root@master1 modules]# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
[root@master1 modules]# 

worker2节点安装docker-ce
ubuntu下安装docker参考这个帖子,亲测正常可安装:
ubuntu安装docker 指定版本安装

// 在根据上述帖子设置好源之后,安装指定版本docker的命令如下:
root@worker2:~# sudo apt-get install docker-ce=5:19.03.13~3-0~ubuntu-xenial
安装完成之后,docker服务会自动启动,手动设置下开机自启
root@worker2:~# systemctl enable docker 
3,修改docker-ce服务配置文件

修改其目的是为了后续使用/etc/docker/daemon.json来进行更多配置。
master1和worker1节点修改:

[root@master1 modules]# vi  /usr/lib/systemd/system/docker.service

编辑docker.service文件,并删除ExecStrt字段后面 -H所有内容,即截图中的光标选中部分
在这里插入图片描述
worker2节点修改
ubuntu的docker.service文件并不保存在和centos一样路径下,需要手动搜索并确认

root@worker2:~# find / -name docker.service
/lib/systemd/system/docker.service
/sys/fs/cgroup/memory/system.slice/docker.service
/sys/fs/cgroup/blkio/system.slice/docker.service
/sys/fs/cgroup/devices/system.slice/docker.service
/sys/fs/cgroup/cpu,cpuacct/system.slice/docker.service
/sys/fs/cgroup/pids/system.slice/docker.service
/sys/fs/cgroup/systemd/system.slice/docker.service
/var/lib/systemd/deb-systemd-helper-enabled/multi-user.target.wants/docker.service
/etc/systemd/system/multi-user.target.wants/docker.service
root@worker2:~# vi /lib/systemd/system/docker.service 
root@worker2:~# 

确认文件之后,进行修改,和master1,worker1节点一样,删除ExecStrt字段后面 -H所有内容

4,daemon.json

/etc/docker/daemon.json文件中添加如下内容,以便让docker按照我们的意愿进行运行

[root@master1 modules]# vi /etc/docker/daemon.json
[root@master1 modules]# cat /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"] 
}
[root@master1 modules]#

此处可以提前设置好docker镜像拉取的仓库,方便后边拉去镜像事更快速

[root@master1 modules]# cat  /etc/docker/daemon.json
{
   "exec-opts": ["native.cgroupdriver=systemd"],
   "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
root@kangni-Super-Server:/home/kangni# 

注意第一行末尾需要添加英文逗号
添加完成之后,保存退出,在三台节点上进行重新加载daemon,并重启docker,查看docker状态,如果docker启动失败,则说明daemon.json文件有问题,请确认查看是否文件输入格式不对。

[root@master1 modules]#  systemctl daemon-reload
[root@master1 modules]# systemctl restart docker 
[root@master1 modules]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-11-18 23:31:04 CST; 40s ago
     Docs: https://docs.docker.com
 Main PID: 17182 (dockerd)
    Tasks: 10
   Memory: 39.8M
   CGroup: /system.slice/docker.service
           └─17182 /usr/bin/dockerd

Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.27099...c
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.27099...c
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.29657..."
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.30111..."
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.40944..."
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.44666..."
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.46812...3
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.46818..."
Nov 18 23:31:04 master1 dockerd[17182]: time="2020-11-18T23:31:04.48508..."
Nov 18 23:31:04 master1 systemd[1]: Started Docker Application Containe....
Hint: Some lines were ellipsized, use -l to show in full.
[root@master1 modules]# 

到此docker就安装完毕。下面进行集群的部署软件安装以及集群的初始化

五、安装部署集群软件(所有节点)
1,安装指定版本的kubeadm kubelet kubectl

master1和worker1节点安装
配置yum源

[root@master1 modules]# cat /etc/yum.repos.d/k8s.repo
[kubernetes] 
name=Kubernetes 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ 
enabled=1 
gpgcheck=1 
repo_gpgcheck=1 
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg 
       https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gp

加载yum源

[root@master1 modules]# yum list | grep kubeadm
Importing GPG key 0xA7317B0F:
 Userid     : "Google Cloud Packages Automatic Signing Key <gc-team@google.com>"
 Fingerprint: d0bc 747f d8ca f711 7500 d6fa 3746 c208 a731 7b0f
 From       : https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
y
kubeadm.x86_64                              1.19.4-0                   kubernetes
[root@master1 modules]# 

中途卡顿的时候需要输入“y”以便能让系统导入这个GPG的key
安装指定版本的kubeadm kubelet kubectl

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

等待下载安装完成

worker2节点安装
因为限制,我们不能直接从Google进行安装,需要依次执行下面命令

root@worker2:/etc#curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
// 添加安装源
root@worker2:/etc# cat /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
// 更新apt-get源
root@worker2:/etc# apt-get update
// 安装指定版本的kubeadm kubelet kubectl
root@worker2:/etc# apt-get  install kubeadm=1.17.2-00 kubelet=1.17.2-00 kubectl=1.17.2-00

等待下载安装完成

2,配置kubelet

为了实现docker使用的cgroupdriver与kubelet使用的 cgroup的一致性,建议修改如下文件内容。
master1节点worker1节点修改:

[root@master1 modules]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
[root@master1 modules]#
# 修改完之后,设置kubelet服务开机启动,一定不能开启,因为没有配置文件,配置文件需要初始化之后才会生成
[root@master1 modules]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
[root@master1 modules]#

worker2节点修改:
直接添加 /etc/sysconfig/kubelet文件,然后追加内容

root@worker2:/home/user# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
root@worker2:/home/user# 
# 修改完成之后同样将kubelet服务添加到开机启动里面,且一定不能开启

六,集群初始化
1,镜像准备

将准备的k8s-1-17-2(1).tar的文件上传到master1节点上
在这里插入图片描述
文件内容如下
在这里插入图片描述
上传到master1节点的~目录下之后,直接使用docker load -i 进行加载,加载完成之后即可看到需要的镜像包

[root@master1 ~]# docker load -i k8s-1-17-2\ \(1\).tar 
fc4976bd934b: Loading layer  53.88MB/53.88MB
cd1ab2bfd49e: Loading layer  118.6MB/118.6MB
Loaded image: k8s.gcr.io/kube-apiserver:v1.17.2
b97862ebe54b: Loading layer  108.6MB/108.6MB
Loaded image: k8s.gcr.io/kube-controller-manager:v1.17.2
d9578bb5703e: Loading layer   42.1MB/42.1MB
Loaded image: k8s.gcr.io/kube-scheduler:v1.17.2
682fbb19de80: Loading layer  21.06MB/21.06MB
2dc2f2423ad1: Loading layer  5.168MB/5.168MB
ad9fb2411669: Loading layer  4.608kB/4.608kB
597151d24476: Loading layer  8.192kB/8.192kB
0d8d54147a3a: Loading layer  8.704kB/8.704kB
ca7fe3329548: Loading layer  37.81MB/37.81MB
Loaded image: k8s.gcr.io/kube-proxy:v1.17.2
e17133b79956: Loading layer  744.4kB/744.4kB
Loaded image: k8s.gcr.io/pause:3.1
fe9a8b4f1dcc: Loading layer  43.87MB/43.87MB
ce04b89b7def: Loading layer  224.9MB/224.9MB
1b2bc745b46f: Loading layer  21.22MB/21.22MB
Loaded image: k8s.gcr.io/etcd:3.4.3-0
225df95e717c: Loading layer  336.4kB/336.4kB
7c9b0f448297: Loading layer  41.37MB/41.37MB
Loaded image: k8s.gcr.io/coredns:1.6.5
[root@master1 ~]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.17.2             cba2a99699bd        10 months ago       116MB
k8s.gcr.io/kube-apiserver            v1.17.2             41ef50a5f06a        10 months ago       171MB
k8s.gcr.io/kube-controller-manager   v1.17.2             da5fd66c4068        10 months ago       161MB
k8s.gcr.io/kube-scheduler            v1.17.2             f52d4c527ef2        10 months ago       94.4MB
k8s.gcr.io/coredns                   1.6.5               70f311871ae1        12 months ago       41.6MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        13 months ago       288MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB
[root@master1 ~]# 

准备好master1接点的镜像之后,需要给worker节点准备镜像,不需要全部,只需要其中两个包,因此我们把镜像打成tar包发送给*worker1和worker2就可以
打包镜像:

[root@master1 ~]# docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:v1.17.2
[root@master1 ~]# docker save -o pause.tar k8s.gcr.io/pause:3.1
[root@master1 ~]# ls
anaconda-ks.cfg  k8s-1-17-2 (1).tar  kube-proxy.tar  pause.tar
[root@master1 ~]# 
#需要打包的镜像分别是 k8s.gcr.io/kube-proxy和k8s.gcr.io/pause

打包完成之后,使用scp命令在worker1和worker2上拷贝过来,然后进行加载

[root@worker1 ~]# scp master1:~/kube-proxy.tar ./
The authenticity of host 'master1 (192.168.4.200)' can't be established.
ECDSA key fingerprint is SHA256:YqJzXlBPIBjqKZ9ePl1YpcK/sjn3nrT7tukqevYl+Gc.
ECDSA key fingerprint is MD5:cf:a6:8d:1c:84:be:34:6f:cf:9b:70:3f:e6:fb:61:72.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'master1,192.168.4.200' (ECDSA) to the list of known hosts.
root@master1's password: 
kube-proxy.tar                 100%  113MB  58.9MB/s   00:01    
[root@worker1 ~]# scp master1:~/pause.tar ./
root@master1's password: 
pause.tar                                        100%  737KB  61.7MB/s   00:00    
[root@worker1 ~]# ls
anaconda-ks.cfg  kube-proxy.tar  pause.tar
[root@worker1 ~]# 

将拷贝过来的镜像tar包加载成image,worker1和worker2使用的命令相同

[root@worker1 ~]# docker load -i kube-proxy.tar 
fc4976bd934b: Loading layer  53.88MB/53.88MB
682fbb19de80: Loading layer  21.06MB/21.06MB
2dc2f2423ad1: Loading layer  5.168MB/5.168MB
ad9fb2411669: Loading layer  4.608kB/4.608kB
597151d24476: Loading layer  8.192kB/8.192kB
0d8d54147a3a: Loading layer  8.704kB/8.704kB
ca7fe3329548: Loading layer  37.81MB/37.81MB
Loaded image: k8s.gcr.io/kube-proxy:v1.17.2
[root@worker1 ~]# docker load -i pause.tar 
e17133b79956: Loading layer  744.4kB/744.4kB
Loaded image: k8s.gcr.io/pause:3.1
[root@worker1 ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy   v1.17.2             cba2a99699bd        10 months ago       116MB
k8s.gcr.io/pause        3.1                 da86e6ba6ca1        2 years ago         742kB
[root@worker1 ~]# 
2,集群初始化

接下来就是最重要的环节了,初始化集群,注意,该操作在master节点上执行,即在哪台机器操作,哪台机器即是master节点

#在master节点执行如下命令,注意后面的ip需要修改为自己master节点的ip
[root@master1 ~]#  kubeadm init --kubernetes-version=v1.17.2 --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.4.200

在这里插入图片描述
从截图中可以看到已经成功的完成了初始化部分,在执行初始化的过程中,会自动将kubelet服务启动!
完成之后一定要记得将打印的内容保存下来,后面添加worker节点需要用到。

3,准备集群管理文件

master节点的家目录下创建一个隐藏文件夹:.kube,然后将管理文件拷贝过来,并且给可执行权限

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

完成之后即可使用kubectl的相关命令。

4,配置网络插件calico

根据集群初始化描述,网络插件是以附件的形式添加,因此这里需要手动去添加网络插件,使用的插件为:cacalico
将百度云上传的calico-39文件夹分别上传到三个节点,并加载里面的镜像
在这里插入图片描述
上传玩之后,使用docker load命令加载,在三台节点都需要操作

[root@master1 ~]# cd calico-39/
[root@master1 calico-39]# ls
calico-cni.tar  calico-node.tar  calico.yml  kube-controllers.tar  pod2daemon-flexvol.tar
[root@master1 calico-39]# docker load -i calico-cni.tar 
[root@master1 calico-39]# docker load -i calico-node.tar 
[root@master1 calico-39]# docker load -i kube-controllers.tar 
[root@master1 calico-39]# docker load -i pod2daemon-flexvol.tar 
[root@master1 calico-39]# 

完成之后,在master1节点修改calico的yml文件资源文件清单,记得去掉行号

由于calico自身网络发现机制有问题,因为需要修改 calico使用的物理网卡,且修改620行初始化设置的网卡
添加607608602 - name: CLUSTER_TYPE 
603 value: "k8s,bgp" 
604 # Auto-detect the BGP IP address. 
605 - name: IP 
606 value: "autodetect" 
607 - name: IP_AUTODETECTION_METHOD 
犹豫使用虚拟机网卡是e开头的,修改608行为e开头,否则会出问题
608 value: "interface=e.*" 
修改为初始化时设置的pod-network-cidr 
619 - name: CALICO_IPV4POOL_CIDR 
620 value: "172.16.0.0/16"

完成之后,执行yml文件

[root@master1 calico-39]# kubectl apply -f calico.yml
5,添加工作节点到集群环境

woker1和worker2节点执行添加命令,命令内容即刚才初始化完成打印中的部分。

[root@worker1 calico-39]# kubeadm join 192.168.4.200:6443 --token kjr058.td4xgj2fvl52178v     --discovery-token-ca-cert-hash sha256:ba9ca95e6244536d3e8e0e60ff17770c680fcad59e828d41bbba8ad05b25646c
6,验证集群是否正常初始化

master1节点执行查看命令

查看所有node节点
[root@master1 ~]# kubectl get node
NAME      STATUS     ROLES    AGE   VERSION
master1   Ready      master   28m   v1.17.2
worker1   NotReady   <none>   18s   v1.19.4
worker2   NotReady   <none>   13s   v1.17.2
查看集群状态
[root@master1 ~]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   
查看集群系统所使用的pod的状态
[root@master1 ~]# kubectl get pod -n kube-system
NAME                                       READY   STATUS             RESTARTS   AGE
calico-kube-controllers-6895d4984b-b9nqz   1/1     Running            0          2m36s
calico-node-5bj6v                          1/1     Running            0          2m36s
calico-node-65z6b                          1/1     Running            3          89s
coredns-6955765f44-8slww                   1/1     Running            0          29m
coredns-6955765f44-kw7wn                   1/1     Running            0          29m
etcd-master1                               1/1     Running            0          29m
kube-apiserver-master1                     1/1     Running            0          29m
kube-controller-manager-master1            1/1     Running            0          29m
kube-proxy-5b4d5                           1/1     Running            0          29m
kube-proxy-psglj                           1/1     Running            0          89s
kube-scheduler-master1                     1/1     Running            0          29m
[root@master1 ~]# 

一切正常则k8s集群完成搭建!

Logo

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

更多推荐