智能医学工程-云计算技术与应用-实验07-Kubernetes Cluster

366 阅读8分钟

一、实验目的

1、掌握容器化云数据中心的方案设计方法;

2、掌握Kubernetes Cluster的部署和配置;

3、掌握可视化管理工具Kuboard的安装和使用。

二、实验学时

2学时

三、实验类型

设计性

四、实验任务

1、完成容器化云数据中心的方案设计;

2、完成Kubernetes Cluster的部署和配置;

3、完成可视化管理工具Kuboard的安装。

五、实验环境

1、硬件

本实验基于实验教学中心网络运维实验室服务器集群开展,每个实验小组分配集群中的1台物理服务器作为实验基础平台,提供云计算资源。每个人配备计算机1台。(学生可根据自身情况使用个人计算机)。

2、软件

Windows操作系统,或MacOS操作系统。

安装最新版本的浏览器,建议使用Edge、Chrome等。

3、网络

计算机使用无线网络接入局域网,能够访问实验教学中心网络运维实验室服务器集群,并支持对互联网的访问。

4、工具

六、实验内容步骤

1、云数据中心方案设计

(1)应用场景

建设一个容器化云数据中心。

在容器化云数据中心上创建5个用户,每个用户分配:

(1)独立的命名空间实现资源隔离

(2)独立的NFS共享存储

(3)独立内部地址段用于容器服务

(4)对外服务的10个IP地址

容器化云数据中心应用规划如表7-1所示。

表7-1 容器化云数据中心应用规划表

序号用户名分配命名空间分配存储内部地址对外服务地址
1user01namespace01cloud-k8s-nfs-1192.168.1.0/24172.16.125.111-172.16.125.120
2user02namespace02cloud-k8s-nfs-2192.168.2.0/24172.16.125.121-172.16.125.130
3user03namespace03cloud-k8s-nfs-3192.168.3.0/24172.16.125.131-172.16.125.140
4user04namespace04cloud-k8s-nfs-4192.168.4.0/24172.16.125.141-172.16.125.150
5user05namespace05cloud-k8s-nfs-5192.168.5.0/24172.16.125.151-172.16.125.160

(2)节点规划

容器化云数据中心采用Kubernetes技术栈建设,由5个节点组成,主节点1个,工作节点4个。

节点使用虚拟机,配置信息如表7-2所示。

表7-2 集群节点配置信息

序号虚拟机配置操作系统配置
1虚拟机名称:Cloud-K8s-MasterCPU:2核内存:4GB硬盘:50GB网卡:Class-Cloud-VM-Network主机名:Cloud-K8s-Master操作系统:openEuler 24.03 LTS SP1IP地址:172.16.125.101子网掩码:255.255.255.0网关:172.16.125.1DNS:172.16.125.3
2虚拟机名称:Cloud-K8s-Worker-1CPU:2核内存:4GB硬盘:50GB网卡:Class-Cloud-VM-Network主机名:Cloud-K8s-Worker-1操作系统:openEuler 24.03 LTS SP1IP地址:172.16.125.102子网掩码:255.255.255.0网关:172.16.125.1DNS:172.16.125.3
3虚拟机名称:Cloud-K8s-Worker-2CPU:2核内存:4GB硬盘:50GB网卡:Class-Cloud-VM-Network主机名:Cloud-K8s-Worker-2操作系统:openEuler 24.03 LTS SP1IP地址:172.16.125.103子网掩码:255.255.255.0网关:172.16.125.1DNS:172.16.125.3
4虚拟机名称:Cloud-K8s-Worker-3CPU:2核内存:4GB硬盘:50GB网卡:Class-Cloud-VM-Network主机名:Cloud-K8s-Worker-3操作系统:openEuler 24.03 LTS SP1IP地址:172.16.125.104子网掩码:255.255.255.0网关:172.16.125.1DNS:172.16.125.3
5虚拟机名称:Cloud-K8s-Worker-4CPU:2核内存:4GB硬盘:50GB网卡:Class-Cloud-VM-Network主机名:Cloud-K8s-Worker-4操作系统:openEuler 24.03 LTS SP1IP地址:172.16.125.105子网掩码:255.255.255.0网关:172.16.125.1DNS:172.16.125.3

(3)网络规划

(1)节点网络

  • 主节点 :172.16.125.101
  • 工作节点 :172.16.125.102172.16.125.103172.16.125.104172.16.125.105

(2)集群内部网络

Pod网络是整个Kubernetes集群的Pod网络范围,所有Pod的IP地址都从该范围内分配。

Pod网络CIDR :192.168.0.0/16

Service网络是Kubernetes 集群中Service的虚拟IP地址范围,用于集群内部的服务发现和负载均衡。

Service网络CIDR :10.96.0.0/12

2、配置系统环境

步骤1:在节点Cloud-K8s-Master上配置SElinux、防火墙和Swap分区。

# 关闭防火墙
systemctl stop firewalld

# 禁用防火墙开机自启动
systemctl disable firewalld

# 临时关闭SElinux
setenforce 0

# 永久关闭SElinux
sed -i 's/enforcing/disabled/' /etc/selinux/config

# 永久关闭 Swap 分区
sed -ri 's/.*swap.*/#&/' /etc/fstab

步骤2:设置主机时间同步。

# 设置节点执行时间同步:
yum install ntpdate -y
ntpdate 172.16.125.3

步骤3:设置主机名并配置hosts文件。

# 设置主机名 后面的4台主机也要设置
hostnamectl set-hostname k8s-master  //注意每台主机名称不同

# 在节点上添加 hosts 文件的配置
cat >> /etc/hosts << EOF
172.16.125.101 k8s-master
172.16.125.102 k8s-worker1
172.16.125.103 k8s-worker2
172.16.125.104 k8s-worker3
172.16.125.105 k8s-worker4
EOF

步骤4:配置网桥过滤和地址转发。

# 为所有节点添加网桥过滤和地址转发功能
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 应用新的配置
sysctl --system

# 重启服务器
reboot

参照节点Cloud-K8s-Master的系统环境配置,完成Cloud-K8s-Worker-1、Cloud-K8s-Worker-2、Cloud-K8s-Worker-3、Cloud-K8s-Worker-4系统环境配置。

3、安装Kubernetes基础软件

步骤1:安装Docker。

#配置安装源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo

# 安装Docker
yum install -y docker-ce docker-ce-cli containerd.io

步骤2:配置镜像加速。

# 配置镜像加速和cgroup驱动
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://hub.xdark.top",
    "https://hub.littlediary.cn",
    "https://dockerpull.org",
    "https://hub.crdz.gq",
    "https://docker.1panel.live",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.m.daocloud.io",
    "https://noohub.ru",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud",
    "https://docker.1panel.dev",
    "https://docker.unsee.tech",
    "https://docker.1panel.live"
],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

#启动docker并设置开机自启动
systemctl start docker
systemctl enable docker

步骤3:安装cri-dockerd。

# 安装cri-dockerd,让 Docker 作为 K8s 容器引擎
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm

# 修改配置文件(/usr/lib/systemd/system/cri-docker.service)
#在 “ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd://” 这一行增加
 “-–pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9”

vi /usr/lib/systemd/system/cri-docker.service
-------------------cri-docker.service--------------
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
----------------------------------------------------

#加载配置并开启服务
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

步骤4:安装kubeadm、kubelet 和 kubectl。

#安装kubeadm、kubelet 和 kubectl
#添加阿里云的镜像库
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#安装kubeadm、kubelet 和 kubectl
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0

#设置开机启动 kubelet 服务
systemctl enable kubelet

4、初始化Kubernetes(Master节点)

#在 Master 节点上执行以下初始化命令
kubeadm init \
  --apiserver-advertise-address=172.16.125.101 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=192.168.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all

#apiserver-advertise-address:集群广播地址,用 master 节点的内网 IP
#image-repository:由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址
#kubernetes-version: K8s 版本,与上面安装的软件版本一致
#service-cidr:集群 Service 网段
#pod-network-cidr:集群 Pod 网段
#cri-socket:指定 cri-socket 接口,使用 unix:///var/run/cri-dockerd.sock


//初始化完成后出现提示内容:
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.16.125.101:6443 --token wqhlp8.pbepvo8rkynn3q5z \
        --discovery-token-ca-cert-hash sha256:f17c5cb118e2c8834eab43a96a83b29f033b7ca8dec49f9a5f52f6b8c627b57d

💡

提醒:

在后续集群的配置中需要用到初始化完成后出现提示内容,注意保存。

在Master节点设置 kubectl 工具的管理员权限。

#执行初始化完成后出现提示内容:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

5、创建Kubernetes集群

在Worker节点上执行初始化完成返回的kubeadm join命令,为集群添加工作节点。

kubeadm join 172.16.125.101:6443 --token wqhlp8.pbepvo8rkynn3q5z \
--discovery-token-ca-cert-hash sha256:f17c5cb118e2c8834eab43a96a83b29f033b7ca8dec49f9a5f52f6b8c627b57d
--cri-socket=unix:///var/run/cri-dockerd.sock

📌

命令中token有效期为24小时,当token过期之后,执行 “kubeadm join” 命令就会报错。这时可以直接在Master节点上使用以下命令生成新的token,然后再使用 “kubeadm join” 命令加入节点。

创建一个新的 join token:

kubeadm token create --print-join-command

此时查看集群节点状态,各节点均加入集群但状态都是NotReady,集群的内部网络还没有正常运作,需要安装网络插件。

[root@k8s-master ~]# kubectl get node
NAME          STATUS     ROLES           AGE     VERSION
k8s-master    NotReady   control-plane   20m     v1.28.0
k8s-worker1   NotReady   <none>          3m3s    v1.28.0
k8s-worker2   NotReady   <none>          2m30s   v1.28.0
k8s-worker3   NotReady   <none>          116s    v1.28.0
k8s-worker4   NotReady   <none>          86s     v1.28.0

6、安装网络插件Calico(Master节点)

# 下载 Calico 插件部署文件
wget https://docs.projectcalico.org/manifests/calico.yaml

# 修改 “calico.yaml” 文件中的 “CALICO_IPV4POOL_CIDR” 参数,需要与前面 “kubeadm init”
 命令中的 “–pod-network-cidr” 参数一样(192.168.0.0/16)
vi calico.yaml

#可以输入 “/CALICO_IPV4POOL_CIDR” 来快速定位到参数位置
------------calico.yaml-------------
- name: CALICO_IPV4POOL_CIDR
  value: "192.168.0.0/16"
------------------------------------

# 将 Calico 插件部署到集群里
kubectl apply -f calico.yaml

#等几分钟后查看节点状态
 aster ~]# kubectl get node //状态STATUS是Ready说明集群创建成功
NAME          STATUS   ROLES           AGE   VERSION
k8s-master    Ready    control-plane   68m   v1.28.0
k8s-worker1   Ready    <none>          51m   v1.28.0
k8s-worker2   Ready    <none>          50m   v1.28.0
k8s-worker3   Ready    <none>          50m   v1.28.0
k8s-worker4   Ready    <none>          49m   v1.28.0

7、安装Kuboard

#在 master 节点添加 k8s.kuboard.cn/role=etcd 的标签
kubectl label nodes k8s-master k8s.kuboard.cn/role=etcd
kubectl label nodes k8s-worker1 k8s.kuboard.cn/role=etcd
kubectl label nodes k8s-worker2 k8s.kuboard.cn/role=etcd
kubectl label nodes k8s-worker3 k8s.kuboard.cn/role=etcd
kubectl label nodes k8s-worker4 k8s.kuboard.cn/role=etcd

#下载 kuboard 部署清单
wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml

#部署 kuboard
kubectl apply -f kuboard-v3-swr.yaml

#查看 pod 信息
kubectl get pods -n kuboard

部署完成后浏览器访问:http://172.16.125.101:30080,登录后如图7-1所示。

💡

提醒:

Kuboard部署后的初始用户名:admin,密码:Kuboard123。

添加本地集群,如图7-2所示。

七、实验讲解

本实验配套讲解视频,访问课程学习平台。

八、实验考核

实验考核为【实验随堂查】。

实验随堂查:每个实验设置3-5考核点,学生现场进行演示和汇报讲解。

1、考核点

考核点1:完成K8s集群的搭建,集群状态为Ready。(40分)

考核点2:完成可视化界面Kuboard的安装。(30分)

考核点3:在Kuboard中添加本地K8s集群。(30分)

2、考核方式

以实验小组为单位进行考核,每个小组由1位同学进行实验成果汇报,小组其他成员回答教师提问。根据汇报和答疑情况,对小组成员进行逐一打分。

由教师进行评分。