Top

NSD CLOUD DAY06

  1. 案例1:准备虚拟机环境
  2. 案例2:配置私有仓库
  3. 案例3:安装master
  4. 案例4:安装node节点并加入master
  5. 案例5:配置flannel网络,完成集群
  6. 案例6:配置所有node节点完成集群部署

1 案例1:准备虚拟机环境

1.1 问题

本案例要求准备虚拟机环境,具体要求如下:

  1. 在跳板机配置YUM源服务器
  2. 准备虚拟机master实验环境
  3. 最低配置:2cpu,2G内存
  4. 卸载防火墙 firewalld-*
  5. 禁用 selinux 和 swap
  6. 配置yum仓库,安装kubeadm、kubelet、kubectl、docker-ce
  7. 配置docker私有镜像仓库和cgroup驱动(daemon.json)
  8. 配置内核参数(/etc/sysctl.d/k8s.conf)

1.2 方案

完成后续课程的学习需要提前准备实验用的虚拟机,实验虚拟机列表如表-1所示。

所有主机的主机名和IP必须与列表相同!!!

否则后续所有试验都无法顺利完成!!!

表-1

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:在跳板机配置YUM源服务器(在跳板机主机操作)

Kubernetes相关软件已经提前共享到云盘,各位同学需要提前下载,并传到跳板机主机。云盘资料在第四阶段kubernetes/v1.17.6/k8s-install/目录下。

1)将所有软件资料放到跳板机的YUM共享目录。

  1. [root@localhost ~]# rsync -avXSH --delete \
  2. kubernetes/v1.17.6/k8s-install /var/ftp/localrepo/

2)更新YUM共享服务器数据

  1. [root@server ~]# cd /var/ftp/localrepo
  2. [root@server localrepo]# createrepo --update .

步骤二:安装管理节点所需软件包(在master主机操作)

1)设置yum源

  1. [root@master ~]# vim /etc/yum.repos.d/local.repo
  2. [local_repo]
  3. name=CentOS-$releasever – Localrepo
  4. baseurl=ftp://192.168.1.252/localrepo
  5. enabled=1
  6. gpgcheck=0
  7. [root@master ~]# yum makecache

2)安装软件

  1. [root@master ~]# yum install -y kubeadm kubelet kubectl docker-ce

3)修改docker配置,指定使用私有镜像仓库

私有镜像仓库已经在前面课程搭建完成(在192.168.1.100服务器上)!!!

  1. [root@master ~]# vim /etc/docker/daemon.json
  2. {
  3. "exec-opts": ["native.cgroupdriver=systemd"],
  4. "registry-mirrors": ["https://hub-mirror.c.163.com"],
  5. "insecure-registries":["192.168.1.100:5000", "registry:5000"]
  6. }

4)修改内核参数

  1. [root@master ~]# vim /etc/sysctl.d/k8s.conf #没有该文件,需要新建文件
  2. net.bridge.bridge-nf-call-ip6tables = 1         # 开启桥设备内核监控(ipv6)
  3. net.bridge.bridge-nf-call-iptables = 1         # 开启桥设备内核监控(ipv4)
  4. net.ipv4.ip_forward = 1             # 开启路由转发
  5. [root@master ~]# modprobe br_netfilter #加载内核模块
  6. [root@master ~]# sysctl --system         # 加载上面的k8s.conf配置文件
  7. * Applying /etc/sysctl.d/k8s.conf ...
  8. net.bridge.bridge-nf-call-ip6tables = 1
  9. net.bridge.bridge-nf-call-iptables = 1
  10. net.ipv4.ip_forward = 1
  11. ... ...

5)了解kubeadm命令

  1. kubeadm 命令
  2. config: 配置管理命令
  3. help: 查看帮助
  4. init: 初始命令
  5. join: node加入集群的命令
  6. reset: 还原状态命令
  7. token: token凭证管理命令
  8. version:查看版本

2 案例2:配置私有仓库

2.1 问题

本案例要求上传镜像到私有仓库(192.168.1.100:5000),具体需要上传的镜像列表如下:

  1. 192.168.1.100:5000/kube-apiserver:v1.17.6
  2. 192.168.1.100:5000/kube-controller-manager:v1.17.6
  3. 192.168.1.100:5000/kube-scheduler:v1.17.6
  4. 192.168.1.100:5000/kube-proxy:v1.17.6
  5. 192.168.1.100:5000/pause:3.1
  6. 192.168.1.100:5000/etcd:3.4.3-0
  7. 192.168.1.100:5000/coredns:1.6.5

2.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:列出部署kubernetes需要哪些镜像(在master主机操作)

  1. [root@master ~]# kubeadm config image list     #列出需要的镜像
  2. k8s.gcr.io/kube-apiserver:v1.17.6
  3. k8s.gcr.io/kube-controller-manager:v1.17.6
  4. k8s.gcr.io/kube-scheduler:v1.17.6
  5. k8s.gcr.io/kube-proxy:v1.17.6
  6. k8s.gcr.io/pause:3.1
  7. k8s.gcr.io/etcd:3.4.3-0
  8. k8s.gcr.io/coredns:1.6.5

步骤二:将所有需要的镜像导入私有仓库(在master或者node-0001主机操作)

所有实验需要的镜像都已经提前共享在云盘,各位同学需要将所有镜像下载并传到master主机。镜像在云盘第四阶段kubernetes/v1.17.6/base-images目录下。

警告:所有镜像禁止修改名称和标签,必须保留原名称!!!

  1. [root@master ~]# docker load -i kube-apiserver.tar.gz
  2. #加载kube-apiserver镜像到本地
  3. [root@master ~]# docker tag \
  4. k8s.gcr.io/kube-apiserver:v1.17.6 192.168.1.100:5000/kube-apiserver:v1.17.6
  5. #修改镜像标签(只修改服务器的IP,不要修改镜像名称和后面的版本)
  6. [root@master ~]# docker push 192.168.1.100:5000/kube-apiserver:v1.17.6
  7. #将镜像上传到192.168.1.100私有镜像仓库服务器
  8.  
  9. [root@master ~]# docker load -i pause.tar.gz
  10. #加载pause镜像到本地
  11. [root@master ~]# docker tag \
  12. k8s.gcr.io/pause:3.1 192.168.1.100:5000/pause:3.1
  13. #修改镜像标签(只修改服务器的IP,不要修改镜像名称和后面的版本)
  14. [root@master ~]# docker push 192.168.1.100:5000/pause:3.1
  15. #将镜像上传到192.168.1.100私有镜像仓库服务器
  16.  
  17.  
  18. [root@master ~]# docker load -i kube-proxy.tar.gz
  19. #加载kube-proxy镜像到本地
  20. [root@master ~]# docker tag \
  21. k8s.gcr.io/kube-proxy:v1.17.6 192.168.1.100:5000/kube-proxy:v1.17.6
  22. #修改镜像标签(只修改服务器的IP,不要修改镜像名称和后面的版本)
  23. [root@master ~]# docker push 192.168.1.100:5000/kube-proxy:v1.17.6
  24. #将镜像上传到192.168.1.100私有镜像仓库服务器
  25.  
  26. [root@master ~]# docker load -i kube-controller-manager.tar.gz
  27. #加载kube-controller-manager镜像到本地
  28. [root@master ~]# docker tag \
  29. k8s.gcr.io/kube-controller-manager:v1.17.6 192.168.1.100:5000/kube-controller-manager:v1.17.6
  30. #修改镜像标签(只修改服务器的IP,不要修改镜像名称和后面的版本)
  31. [root@master ~]# docker push 192.168.1.100:5000/kube-controller-manager:v1.17.6
  32. #将镜像上传到192.168.1.100私有镜像仓库服务器
  33.  
  34.  
  35. [root@master ~]# docker load -i kube-controller-manager.tar.gz
  36. #加载kube-controller-manager镜像到本地
  37. [root@master ~]# docker tag \
  38. k8s.gcr.io/kube-controller-manager:v1.17.6 192.168.1.100:5000/kube-controller-manager:v1.17.6
  39. #修改镜像标签(只修改服务器的IP,不要修改镜像名称和后面的版本)
  40. [root@master ~]# docker push 192.168.1.100:5000/kube-controller-manager:v1.17.6
  41. #将镜像上传到192.168.1.100私有镜像仓库服务器
  42.  
  43.  
  44. [root@master ~]# docker load -i etcd.tar.gz
  45. #加载etcd镜像到本地
  46. [root@master ~]# docker tag \
  47. k8s.gcr.io/etcd:3.4.3-0 192.168.1.100:5000/etcd:3.4.3-0
  48. #修改镜像标签(只修改服务器的IP,不要修改镜像名称和后面的版本)
  49. [root@master ~]# docker push 192.168.1.100:5000/etcd:3.4.3-0
  50. #将镜像上传到192.168.1.100私有镜像仓库服务器
  51.  
  52.  
  53. [root@master ~]# docker load -i coredns.tar.gz
  54. #加载coredns镜像到本地
  55. [root@master ~]# docker tag \
  56. k8s.gcr.io/coredns:1.6.5 192.168.1.100:5000/coredns:1.6.5
  57. #修改镜像标签(只修改服务器的IP,不要修改镜像名称和后面的版本)
  58. [root@master ~]# docker push 192.168.1.100:5000/coredns:1.6.5
  59. #将镜像上传到192.168.1.100私有镜像仓库服务器

3 案例3:安装master

3.1 问题

本案例要求安装部署master,分别实现以下目标:

  1. 设置tab键
  2. 安装IPVS模式软件包 ipvsadm、ipset
  3. 在master上部署kubernetes

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装部署master管理节点(在master主机操作操作)

1)设置Tab补齐

kubectl、kubeadm支持自动补全功能,可以节省大量输入,自动补全脚本由 kubectl、kubeadm产生,仅需要在您的 shell 配置文件中调用即可。

  1. [root@master ~]# kubectl completion bash >/etc/bash_completion.d/kubectl
  2. [root@master ~]# kubeadm completion bash >/etc/bash_completion.d/kubeadm
  3. [root@master ~]# exit
  4. # 注意 :配置完成以后需要退出,重新登录后才能生效

2)安装IPVS代理

  1. [root@master ~]# yum install -y ipvsadm ipset

3)k8s系统初始化

  1. [root@master ~]# kubeadm init --dry-run
  2. ... ...
  3. 根据提示信息排错若干
  4. ... ...
  5.  
  6. --------------------------------------------------------------------
  7. [root@master ~]# kubeadm config print init-defaults >kubeadm-init.yaml

4)修改配置文件

修改好的配置文件已经共享在云盘,直接使用修改好的配置文件即可。

配置文件在第四阶段kubernetes/v1.17.6/config/kubeadm-init.yaml。

  1. [root@master ~]# vim kubeadm-init.yaml
  2. 06: ttl: 24h0m0s                         # token 生命周期
  3. 12: advertiseAddress: 192.168.1.21        # apiserver 的IP地址
  4. 32: imageRepository: 192.168.1.100:5000    # 镜像仓库地址
  5. 34: kubernetesVersion: v1.17.6        # 当前安装的 k8s 版本
  6. 36: dnsDomain: cluster.local        # 默认域名地址
  7. 37: podSubnet: 10.244.0.0/16        # 容器地址cidr,新添加
  8. 38: serviceSubnet: 10.254.0.0/16        # 服务地址cidr
  9. #文件最后手动添加如下4
  10. ---                    
  11. apiVersion: kubeproxy.config.k8s.io/v1alpha1
  12. kind: KubeProxyConfiguration
  13. mode: ipvs

5)安装master

  1. [root@master ~]# kubeadm init --config=kubeadm-init.yaml | tee master-init.log
  2. ... ...
  3. Your Kubernetes control-plane has initialized successfully!
  4. To start using your cluster, you need to run the following as a regular user:
  5. mkdir -p $HOME/.kube
  6. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  7. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  8. ... ...
  9. [root@master ~]# mkdir -p /root/.kube
  10. [root@master ~]# cp -i /etc/kubernetes/admin.conf /root/.kube/config

6)启动服务并验证

  1. [root@master ~]# kubectl get componentstatuses
  2. NAME     STATUS     MESSAGE     ERROR
  3. controller-manager     Healthy     ok
  4. scheduler     Healthy         ok
  5. etcd-0         Healthy         {"health":"true"}
  6. [root@master ~]# kubectl version
  7. Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.6", GitCommit:"d32... ...", GitTreeState:"clean", BuildDate:"2020-05-20T13:16:24Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
  8. Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.6", GitCommit:"d32... ...", GitTreeState:"clean", BuildDate:"2020-05-20T13:08:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

4 案例4:安装node节点并加入master

4.1 问题

本案例要求安装node节点并加入master,具体要求如下:

  1. node主机最低配置:2cpu,2G内存
  2. 初始化系统环境(步骤同 master)
  3. 设置主机名/etc/hosts
  4. master上创建 token
  5. 安装 node 并加入集群

4.2 步骤

实现此案例需要按照如下步骤进行。

!!!提醒:本案例的所有操作都已经编写了ansible剧本,下面的所有操作步骤都可以通过ansible自动化完成。

各位同学在【跳板机】主机下载ansible配置以及对应的素材,执行剧本即可完成下面的所有操作!

Ansible素材在云盘共享第四阶段kubernetes/v1.17.6/node-install/目录下。

将整个目录下载拷贝到【跳板机】,然后修改剧本中的Token和对应的Hash值。

如果获取Token和对应的Hash值,可以参考下面的【步骤二】。

  1. [root@localhost node-install]# vim node_install.yaml # 执行前需要修改剧本
  2. vars:
  3. master: '192.168.1.21:6443'
  4. token: ‘fm6kui.mp8rr3akn74a3nyn’ # 设置获取的 token
  5. token_hash: ‘sha256:f46dd7ee … …’     # 设置获取的 token hash
  6. [root@localhost node-install]# ansible-playbook node_install.yaml # 执行剧本

步骤一:初始化node节点(在node-0001主机操作)

1)关闭防火墙和SELinux。

  1. [root@node-0001 ~]# vim /etc/selinux/config
  2. ... ...
  3. SELINUX=disabled
  4. [root@node-0001 ~]# yum -y remove firewalld-*
  5. ... ...
  6. [root@node-0001 ~]# reboot
  7. ... ...
  8. [root@node-0001 ~]# sestatus
  9. SELinux status: disabled

2)配置YUM源

  1. [root@node-0001 ~]# vim /etc/yum.repos.d/local.repo
  2. [local_repo]
  3. name=CentOS-$releasever – Localrepo
  4. baseurl=ftp://192.168.1.252/localrepo
  5. enabled=1
  6. gpgcheck=0

3)如果系统中有swap交换分区的话,则禁用该分区,可以在/etc/fstab中禁用。

4)安装软件

  1. [root@node-0001 ~]# yum install -y kubeadm kubelet docker-ce

5)安装IPVS代理

  1. [root@node-0001 ~]# yum install -y ipvsadm ipset

6)修改docker配置,指定使用私有镜像仓库

  1. [root@node-0001 ~]# vim /etc/docker/daemon.json
  2. {
  3. "exec-opts": ["native.cgroupdriver=systemd"],
  4. "registry-mirrors": ["https://hub-mirror.c.163.com"],
  5. "insecure-registries":["192.168.1.100:5000", "registry:5000"]
  6. }

7)修改内核参数

  1. [root@node-0001 ~]# vim /etc/sysctl.d/k8s.conf #没有该文件,需要新建文件
  2. net.bridge.bridge-nf-call-ip6tables = 1         # 开启桥设备内核监控(ipv6)
  3. net.bridge.bridge-nf-call-iptables = 1         # 开启桥设备内核监控(ipv4)
  4. net.ipv4.ip_forward = 1             # 开启路由转发
  5. [root@node-0001 ~]# modprobe br_netfilter #加载内核模块
  6. [root@node-0001 ~]# sysctl --system         # 加载上面的k8s.conf配置文件
  7. * Applying /etc/sysctl.d/k8s.conf ...
  8. net.bridge.bridge-nf-call-ip6tables = 1
  9. net.bridge.bridge-nf-call-iptables = 1
  10. net.ipv4.ip_forward = 1
  11. ... ...

8)修改/etc/hosts

  1. [root@node-0001 ~]# vim /etc/hosts
  2. ::1        localhost    localhost.localdomain    localhost6    localhost6.localdomain6
  3. 127.0.0.1    localhost    localhost.localdomain    localhost4    localhost4.localdomain4
  4. 192.168.1.21    master
  5. 192.168.1.31    node-0001
  6. 192.168.1.32    node-0002
  7. 192.168.1.33    node-0003
  8. 192.168.1.34    node-0004
  9. 192.168.1.35    node-0005

步骤二:将node加入K8s集群

1)启动服务器(在node-0001主机操作)

  1. [root@node-0001 ~]# systemctl enable --now docker kubelet

2)查看日志查找下面这一行安装指令的样例(在master主机操作)

  1. kubeadm join 192.168.1.21:6443 --token <token> \
  2. --discovery-token-ca-cert-hash sha256: <token ca hash>

3)如何获取Token Hash值(在master主机操作)

  1. [root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | \
  2. openssl rsa -pubin -outform der |openssl dgst -sha256 -hex
  3. writing RSA key
  4. (stdin)= f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c

4)如何获取Token(在master主机操作)

  1. [root@master ~]# kubeadm token list                # 列出 token
  2. [root@master ~]# kubeadm token delete <token>        # 删除 token
  3. [root@master ~]# kubeadm token create                # 创建 token
  4. [root@master ~]# kubeadm token create --ttl=0 --print-join-command
  5. ... ...
  6. kubeadm join 192.168.1.21:6443 --token fm6kui.mp8rr3akn74a3nyn
  7. --discovery-token-ca-cert-hash
  8. sha256:f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c

5)安装node节点(在node-0001主机操作)

使用刚刚生成的token指令完成node节点安装,下面的Toen和Hash值不能照抄。

  1. [root@node-0001 ~]# kubeadm join 192.168.1.21:6443 --token \
  2. fm6kui.mp8rr3akn74a3nyn --discovery-token-ca-cert-hash sha256:f46dd7ee29faa3c096cad189b0f9aedf59421d8a881f7623a543065fa6b0088c

5 案例5:配置flannel网络,完成集群

5.1 问题

本案例要求配置flannel网络,完成集群,具体要求如下:

  1. 导入镜像到私有仓库
  2. 修改配置文件
  3. 启动网络组件

5.2 步骤

实现此案例需要按照如下步骤进行。

注意:本案例需要的软件都已经共享在云盘,在第四阶段kubernetes/v1.17.6/ flannel目录下。各位同学需要提前将该目录下的素材下载到master主机。

步骤一:导入并将镜像上传至192.168.1.100私有镜像服务器(在master主机操作)

安装软件并启动服务

  1. [root@master ~]# docker load -i flannel.tar.gz
  2. # 加载镜像
  3. [root@master ~]# docker tag \
  4. quay.io/coreos/flannel:v0.12.0-amd64 192.168.1.100:5000/flannel:v0.12.0-amd64
  5. # 修改标签
  6. [root@master ~]# docker push 192.168.1.100:5000/flannel:v0.12.0-amd64
  7. # 上传镜像到192.168.1.100服务器

步骤二:配置flannel网络(master主机操作)

1)修改资源配置文件

资源配置文件已经共享在云盘第四阶段kubernetes/v1.17.6/ flannel目录下。

  1. [root@master ~]# vim flannel/kube-flannel.yaml
  2. 128: "Network": "10.244.0.0/16",        
  3. # 该地址必须与案例3初始化文件 kubeadm-init.yaml 中的 podSubnet 一致
  4. 172: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
  5. 186: image: 192.168.1.100:5000/flannel:v0.12.0-amd64
  6. 227行到结尾的所有内容全部删除

2)创建资源

  1. [root@master ~]# kubectl apply -f kube-flannel.yml
  2. podsecuritypolicy.policy/psp.flannel.unprivileged created
  3. clusterrole.rbac.authorization.k8s.io/flannel created
  4. clusterrolebinding.rbac.authorization.k8s.io/flannel created
  5. serviceaccount/flannel created
  6. configmap/kube-flannel-cfg created
  7. daemonset.apps/kube-flannel-ds-amd64 created

3)验证效果

  1. [root@master ~]# ifconfig
  2. flannel.1: flags=4163 ... ...
  3. ... ...
  4. [root@master ~]# kubectl get nodes
  5. NAME             STATUS    ROLES    AGE    VERSION
  6. master            Ready    master    26h    v1.17.6
  7. node-0001    Ready    <none>    152m    v1.17.6

6 案例6:配置所有node节点完成集群部署

6.1 问题

本案例要求参考案例4将其他所有node节点加入K8s集群,具体要求如下:

  1. 将node-0002加入K8S集群
  2. 将node-0003加入K8S集群

6.2 步骤

实现此案例需要按照如下步骤进行。

具体操作步骤参考【案例4】,我们可以直接使用提前准备好的ansible剧本自动化完成添加node节点的任务,也可以尝试自己手动操作。