使用kubeadm跨系统搭建k8s集群(centos7+Ubuntu16.04)
一、帖子相关说明1,如有侵权,联系删除2,帖子参考传智播客的教程帖子 :B站传智播客K8s集群搭建视频教程3,原视频是以centos7来搭建的集群4,本帖实现跨系统k8s集群的搭建,以及NFS做持久化的简单使用5,里面需要的资料,以及各部分需要科学上网拿到的种镜像文件,因为下载不方便,我这边单独下载了整理了下其中文档只保留了需要的部分,附百度云盘的链接:资料提取地址提取码:uh9y失效请发私信补发
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
一、帖子相关说明
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行初始化设置的网卡
添加607及608行
602 - 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集群完成搭建!
更多推荐
所有评论(0)