- 一、环境准备
- 二、部署前准备
- 1、检查docker版本、关闭防火墙及Selinux、清空iptables规则、禁用Swap交换分区
- 2、配置ssh免密登录、主机名解析及yum源
- 3、打开iptables桥接功能及路由转发
- 三、配置k8s集群
- 1、安装部署k8s相关工具
- 2、下载并导入镜像
- 3、初始化主节点
- 4、部署网络Flannel
- 5、node01及node02加入master集群
| 系统版本 | 主机名 | IP | 基于的服务 |
|---|---|---|---|
| CentOS 7.8 | master | 10.206.44.62 | Docker |
| CentOS 7.8 | node01 | 10.206.44.64 | Docker |
| CentOS 7.5 | node02 | 10.206.47.167 | Docker |
三台主机均需配置
#确认docker版本
[root@master appdeploy]# docker -v
Docker version 19.03.9, build 9d988398e7
#关闭防火墙状态
[root@master appdeploy]# systemctl stop firewalld
[root@master appdeploy]# systemctl disable firewalld
[root@master appdeploy]# systemctl status firewalld
● firewalld.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)
#关闭Selinux
[root@master appdeploy]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce: SELinux is disabled
#清空iptables规则
[root@master appdeploy]# iptables -F
#重启docker服务
[root@master appdeploy]# systemctl daemon-reload
[root@master appdeploy]# systemctl restart docker
#关闭虚拟内存
[root@master appdeploy]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce: SELinux is disabled
#重新加载挂载的配置文件
[root@master appdeploy]# mount -a
#确认输出的swap行都为0
[root@master appdeploy]# free -h
total used free shared buff/cache available
Swap: 0B 0B 0B
2、配置ssh免密登录、主机名解析及yum源
三台主机均需配置
#添加三台主机的解析 [root@master appdeploy]# vim /etc/hosts 10.206.44.62 master 10.206.44.64 node01 10.206.47.167 node02 #配置yum源 [root@master appdeploy]# vim /etc/yum.repos.d/kubernetes.repo [kubernetes] name=kubneters baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 #查看配置的yum源中有没有可用的包 [root@master appdeploy]# yum repolist repo id repo name status kubernetes kubneters 810 #返回的这一行不可为0 #制作yum元数据缓存 [root@master appdeploy]# yum makecache3、打开iptables桥接功能及路由转发
#打开iptables桥接功能 [root@master appdeploy]# vim /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 #刷新配置 [root@master appdeploy]# sysctl -p /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 # PS:如果报错“找不到文件”,需要执行下面的命令以便加载一个模块。 [root@master appdeploy]# modprobe br_netfilter #加载br_netfileter模块 #开启路由转发 [root@master appdeploy]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #刷新配置 [root@master appdeploy]# sysctl -p net.ipv4.ip_forward = 1三、配置k8s集群 1、安装部署k8s相关工具
三台主机均需配置
#安装kubeadm、kubectl、kubelet [root@master appdeploy]# yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1 #设置启动开机自启kubelet服务 [root@master appdeploy]# systemctl enable kubelet.service2、下载并导入镜像
三台主机均需配置
Kubeadm在初始化k8s集群的时候,会从谷歌云服务器取pull所需的镜像,由于国内网络的原因,无法直接从谷歌pull镜像,所以在初始化之前要先将镜像导入到k8s集群中。
下载镜像 kubeadm-basic.images.tar:https://download.csdn.net/download/qq_42124528/85582716
[root@master appdeploy]# mkdir images [root@master appdeploy]# cd images/ #上传镜像并解压 [root@master images]# rz [root@master images]# tar -zxvf kubeadm-basic.images.tar.gz #确认上传的镜像包,共7个 [root@master kubeadm-basic.images]# ls apiserver.tar coredns.tar etcd.tar kubec-con-man.tar pause.tar proxy.tar scheduler.tar #创建load-images.sh,用于批量导入kubeadm-basic镜像 [root@master appdeploy]# vim load-images.sh #!/bin/bash ls /home/appdeploy/images/kubeadm-basic.images > /tmp/image-list.txt cd /home/appdeploy/images/kubeadm-basic.images for i in $(cat /tmp/image-list.txt) do docker load -i $i done rm -rf /tmp/image-list.txt #给创建的脚本赋权 [root@master appdeploy]# chmod +x load-images.sh #执行脚本批量导入镜像 [root@master appdeploy]# ./load-images.sh Loaded image: k8s.gcr.io/kube-apiserver:v1.15.1 Loaded image: k8s.gcr.io/coredns:1.3.1 Loaded image: k8s.gcr.io/etcd:3.3.10 Loaded image: k8s.gcr.io/kube-controller-manager:v1.15.1 Loaded image: k8s.gcr.io/pause:3.1 Loaded image: k8s.gcr.io/kube-proxy:v1.15.1 Loaded image: k8s.gcr.io/kube-scheduler:v1.15.13、初始化主节点
只在主节点执行
[root@master appdeploy]# kubeadm init --kubernetes-version=v1.15.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap #初始化成功后,复制生成的join命令,用于其他节点加入到当前k8s集群,有效期只有24小时 #若初始化失败,可以执行kubeadm reset进行重置 #kubeadm join 10.206.44.62:6443 --token bdve5v.zc3grkcu1cizv1pe --discovery-token-ca-cert-hash sha256:a21d64843fae7e2ccfad093f7e529bf4a944960ef3a300b66e1b895ee3a24a26 # PS:如果超出24小时,则需在主节点上重新获得新的加入节点命令 [root@master appdeploy]# kubeadm token create --print-join-command #依次执行 [root@master appdeploy]# mkdir -p $HOME/.kube [root@master appdeploy]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master appdeploy]# chown $(id -u):$(id -g) $HOME/.kube/config #查看节点状态 [root@master appdeploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 4m59s v1.15.1 #可以看到master当前状态为未准备4、部署网络Flannel
三台主机均需配置
#方法1 [root@master appdeploy]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml #方法2 #将github官网指定的.yml配置文件下载到本地 [root@master appdeploy]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml #或者直接下载 flannel.yaml:https://download.csdn.net/download/qq_42124528/85582540 #指定下载的.yml文件执行相应命令 [root@master appdeploy]# kubectl apply -f flannel.yaml #部署完成后,查看pod状态 [root@master appdeploy]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE kube-flannel-ds-skxb8 0/1 Init:ImagePullBackOff 0 42m #若STATUS为RUNNING,则可忽略导入flanneld镜像步骤 #若STATUS为Init:ImagePullBackOff,则需进行以下步骤导入镜像 #可以到 https://github.com/coreos/flannel/releases 官方仓库下载镜像, 或者直接使用下面链接下载 #下载镜像 flanneld-v0.18.1-amd64.docker:https://download.csdn.net/download/qq_42124528/85582489 #上传镜像 [root@master appdeploy]# rz #导入镜像 [root@master appdeploy]# docker load < flanneld-v0.18.1-amd64.docker 64242626f2eb: Loading layer [==================================================>] 5.893MB/5.893MB ebd5ac721ae3: Loading layer [==================================================>] 12.35MB/12.35MB 2d494ab70ef9: Loading layer [==================================================>] 2.743MB/2.743MB d022ff88f29e: Loading layer [==================================================>] 42.23MB/42.23MB 5d07ac15a06b: Loading layer [==================================================>] 5.632kB/5.632kB b1c230abd455: Loading layer [==================================================>] 9.216kB/9.216kB ada31875f6e2: Loading layer [==================================================>] 7.68kB/7.68kB Loaded image: flannelcni/flannel:v0.18.1-amd64 #查看docker镜像,已有flannelcni/flannel:v0.18.1-amd64 [root@master appdeploy]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE flannelcni/flannel v0.18.1-amd64 e237e8506509 38 hours ago 62.2MB #查看pod状态,全部为Running [root@k8s-master01 tmp]# kubectl get pod -n kube-system NAMESPACE NAME READY STATUS RESTARTS AGE kube-system kube-flannel-ds-cs8wf 1/1 Running 0 5h54m kube-system kube-proxy-p5h78 1/1 Running 0 5h54m #此时STATUS均为Running #再次查看master状态,已经变成了Ready [root@master appdeploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 20m v1.15.15、node01及node02加入master集群
以下操作需要在node01及node02分别执行一次
[root@node01 appdeploy]# kubeadm join 10.206.44.62:6443 --token exv0mq.0yk6wtb7zjxc5cim --discovery-token-ca-cert-hash sha256:a21d64843fae7e2ccfad093f7e529bf4a944960ef3a300b66e1b895ee3a24a26 #This node has joined the cluster
当在node01及node02依次配置完成后,即可在master上进行查看节点状态
[root@master appdeploy]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 6h v1.15.1 node01 Ready4h v1.15.1 node02 Ready 21m v1.15.1



