基于CCE kubernetes编排实战
实验手册

来源:https://edu.huaweicloud.com/lab/experiment-detail_2939(华为云开发者云实验 KooLabs)

本实验用于指导学员基于CCE完成Kubernetes实验操作,主要包含Kubernetes控制器Deployment、DaemonSet编排操作。(难度:初级 · 时长:1.5小时)

实验目标与基本要求:

1、熟悉云容器引擎服务CCE创建

2、熟悉kubectl基本命令

3、掌握Kubernetes控制器创建,包括Deployment、DaemonSet创建

实验摘要:操作前提(预置环境与登录华为云) → 1. 实验环境准备 → 2. Kubernetes组件实操 → 3. Deployment实验 → 4. DaemonSet实验

基于CCE kubernetes编排实战

本实验用于指导学员基于CCE完成Kubernetes实验操作。主要包含Kubernetes控制器Deployment、DaemonSet编排操作。

操作前提:预置环境与登录华为云

预置环境

注意:进入实验环境后系统会自动预置环境,显示“资源准备中,预计需要1~2分钟,请耐心等待”,实验环境预置成功后显示如下。

预置实验环境需几分钟,成功后将会创建本实验所需的云资源(例如VPC、安全组或云服务器)。

图 1

登录华为云

进入【实验操作桌面】,点击【一键登录】,可自动登录并进入华为云控制台页面。

图 2

注意:进入华为云控制台后,请确保右上角的实验账号与手册左上角提供的账号信息一致,切勿使用您自己的华为云账号登录。

图 3

1. 实验环境准备

1.1 购买云容器引擎服务CCE

1. 登录完成后,鼠标移动到云桌面浏览器页面中左上角,点击“服务列表”,搜索“CCE”,点击“云容器引擎CCE”,进入云容器引擎CCE控制台,如下图所示:

图 4

选择“CCE Standard 集群”,点击“创建”,进入云容器引擎CCE购买页面。

配置参数如下:

① 计费模式:按需计费

② 集群名称:cce01

③ 集群版本:v1.35 或选择其他推荐版本(本实验手册以v1.35为例)

④集群委托:使用已有委托,CCEAutoClusterAgency,勾选“我确认委托已授予集群所需的权限。”

⑤ 集群规模:50节点

⑥集群master实例数:单实例

⑦虚拟私有云&子网:预置环境预置的VPC和子网

⑧ 节点默认安全组:点击“选择已有”,再在下拉列表里选中“sg-hce”,并勾选橙色的声明,如图:

图 5

⑨ 网络模型&容器网段:容器隧道网络 ,自动设置网段

⑩ 服务转发模式:iptables

其它参数默认。点击“下一步:插件选择”:

只保持默认安装的插件,其他勾选都取消,点击“下一步:插件配置”。

图 6

在插件配置页面,点击“调整配置”,参数如下:

委托配置:使用已有委托

选择委托:CCEAutoClusterAgency

勾选 “我确认委托已授予插件所需的权限。”

其他配置默认即可

图 7 图 8

调整配置后,点击“下一步:确认配置”。

在确认配置页面,勾选“我已阅读并知晓上述使用说明”,点击“提交”。

点击“返回集群管理”,等待集群创建完成【大约8分钟】,集群显示“运行中”。

2. 完成集群创建后,在集群管理页面点击右侧“创建节点”进入“创建节点”步骤。

图 9

配置参数如下:

① 计费模式:按需计费

② 可用区:随机分配

③ 节点类型:弹性云服务器-虚拟机

④ 节点规格:c7.xlarge.2

说明:若规格售罄,可选择同规格 4u8G的其他资源,请按照规格大小购买,若超出规格,平台会自动删除资源

⑤ 容器引擎:Containerd

⑥ 操作系统:公共镜像 Huawei Cloud EulerOS 2.0

⑦ 节点名称:cce01-node1

⑧ 密码:按系统要求设置密码

⑨ 系统盘:高IO 50G

⑩ 数据盘:高IO 100G

⑫ 虚拟私有云:默认

⑬ 节点子网:选择默认

⑭ 节点IP:自动分配

⑮ 弹性公网IP:自动创建

⑯ 线路:全动态BGP 按带宽计费 5M ,请按照建议大小购买,若超出规格,平台会自动删除资源

确认无误,勾选协议后,点击“提交”。

创建完成,等待3-5min,可以看到节点池创建完成,可调度。

图 10

1.2 购买弹性云服务器

1. 鼠标移动到云桌面浏览器页面中左侧菜单栏,点击“服务列表”->搜索“ECS”->点击“弹性云服务器 ECS”,进入控制台,如下图所示:

图 11

2. 在弹性云服务器管理控制界面,单击“购买弹性云服务器”。

基础配置参数如下:

选择 自定义购买

① 计费模式:按需计费

② 区域:北京四

③ 可用区:随机分配

④ CPU架构:x86计算

⑤ 规格:通用计算增强型 | c7.large.2 | 2vCPUs | 4 GiB

说明:若规格售罄,可选择同规格 2u4G的其他资源,请按照规格大小购买,若超出规格,平台会自动删除资源

⑥ 镜像:公共镜像 | CentOS 7.6 64bit(10GB)

⑦ 安全防护:取消勾选

⑧ 系统盘:高IO | 40 G

网络配置参数如下:

① 网络:必须与CCE集群所在的VPC相同

② 扩展网卡:默认配置

③ 安全组:sg-hce

④ 弹性公网IP:现在购买

⑤ 线路:全动态BGP

⑥ 公网带宽:按流量计费

⑦ 带宽大小:5MB ,请按照建议大小购买,若超出规格,平台会自动删除资源

⑧ 云服务器名称:ecs-k8s

⑨ 登录凭证:密码

⑩ 密码:按系统要求设置密码

其余参数默认即可。

确认配置无误,单击“立即购买”后,点击返回云服务器列表。当状态为“运行中”表示已创建完成。

图 12

1.3 登录弹性云服务器

在远程操作之前首选需要进行安全组的配置,点击右侧导航栏“安全组”,找到sg-hce安全组然后点击“配置规则”:

图 13

接下来点击“入方向规则”然后点击“一键放通常用端口”最后点击确定:

图 14

1. 接下来,双击实验桌面的“Xfce终端”打开Terminal,输入以下命令登录云服务器。

注意:后续操作请保持Terminal窗口与云服务器的链接状态,以确保所有操作都执行在云服务器上。

注意:请使用云服务器ecs-k8s的公网IP替换命令中的【EIP】。

LANG=en_us.UTF-8 ssh root@EIP

说明:云服务器的弹性公网IP地址可以通过鼠标移动到云桌面浏览器页面中左侧菜单栏,点击服务列表->“计算”->“弹性云服务器ECS”进入服务器列表,进查看并复制。

图 15

2. 接受秘钥输入“yes”,回车;

3. 输入密码:创建ECS时设定的密码(输入密码时,命令行窗口不会显示密码,输完之后直接键入回车)。

成功登录云服务器之后如下图所示(实验过程中请勿关闭该Terminal窗口,否则需要重复此步骤重新建立连接):

图 16

ECS登录密码获取,点击【实验资源信息】右侧下拉展开查看,或点击眼睛图标查看预置环境信息:

图 17

1.4 安装kubernetes客户端

1.4.1 下载kubectl

1. 下载kubectl配置文件。

云容器引擎控制台界面,点击创建的云容器引擎名称进入集群信息界面,下拉至连接信息,点击kubectl后的“配置”。

图 18

2. 选择有效期及 JSON 格式后,点击“下载”。

3.

图 19

3. 将下载的kubectl配置文件复制到到实验的操作桌面。

图 20

4. 完成后,重新打开一个Xfce终端窗口,将上一步②中下载到实验桌面的kubectl配置文件kubeconfig.json上传到ecs-k8s中

注意:请使用云服务器ecs-k8s的弹性公网IP替换命令中的【EIP】。

scp /home/user/Desktop/cce01-kubeconfig.json root@EIP:/root
图 21

1.4.2 安装和配置kubectl

1. 在登录弹性云服务器ecs-k8s的Xfce终端上,下载kubectl,并将kubectl和配置文件拷贝到/home目录下。

cd ~
wget https://edu-res.hc-cdn.cn/sharedata/hdinnovation/sandbox/lab2024/20221021/kubernetes-client-linux-amd64.tar.gz
ls
tar -zxvf kubernetes-client-linux-amd64.tar.gz
cp /root/kubernetes/client/bin/kubectl /home/
cp cce01-kubeconfig.json /home/
cd /home
图 22

2. 如kubectl没有可执行权限,增加权限:

chmod +x kubectl

获得执行权限后,将文件移动到/usr/local/bin目录:

mv kubectl /usr/local/bin

3. 将配置文件复制到$HOME/.kube/config文件中。

mkdir $HOME/.kube
cp cce01-kubeconfig.json $HOME/.kube/config

4. 切换kubectl的访问模式为VPC网络内接入访问。

kubectl config use-context internal
图 23

1.4.3 验证kubectl安装结果

kubectl cluster-info
图 24

1.5 使用kubectl help命令

1. 使用如下命令查看kubectl中可用的[COMMAND]。

kubectl --help

2. 使用如下命令查看kubectl中get命令的详细说明,使用样例:

kubectl get --help
图 25

2. Kubernetes组件实操

2.1 查看Kubernetes状态

1. 查看节点状态。

kubectl get node

2. 查看现有namespace。

kubectl get namespace
图 26

3. 创建namespace。

kubectl create namespace new-namespace

4. 再次查看namespace列表。

kubectl get namespace

5. 删除新创建的namespace。

kubectl delete namespace new-namespace
图 27

3. Deployment实验

3.1 运行第一个Deployment

1. 创建一个Deployment。

kubectl create deployment mydep  --image=nginx

2. 通过命令行查看Deployment。

kubectl get deploy

3. 使用kubectl describe命令查看资源对象的详细信息。

kubectl describe deployment mydep
图 28

4. 通过CCE控制台查看Deployment。点击控制台中的工作负载—>无状态负载,可以看到创建的工作负载mydep。点击并进入工作负载详情页面。

图 29

3.2 使用kubectl命令行工具查看对象

1. 使用kubectl get命令,get all可以查看所有对象。

kubectl get all
图 30

2. 查看指定namespace的对象。

kubectl get all -n kube-system
图 31

3. 以交互模式查看对象的变化,按ctrl+c退出交互模式。

kubectl get deployment -w
图 32

4. 查看完整的对象信息。

kubectl get deployment -o wide
图 33

3.3 创建自定义Deployment

1. 在master节点创建/labfile/deployfile目录,用于保存配置文件。后续创建deployment的yaml文件保存在此处。

cd /
mkdir labfile
cd labfile/
mkdir deployfile
cd deployfile/
图 34

2. 创建deployment文件。

vim nginx-deployment.yaml

按'i'键进行编辑,文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.3
        ports:
        - containerPort: 80

3. 按Esc键退出编辑,输入":wq"保存并退出,部署nginx-deployment。

kubectl apply -f nginx-deployment.yaml
图 35

4. 查看创建结果。

kubectl describe deployment nginx-deployment
kubectl get deployment
图 36

5. 查看Pod(等待约 2分钟,才会显示 Running状态)。

kubectl get pod
图 37

6. 同样的,可以在CCE控制台中,刷新一下查看副本数及pod。

点击nginx-deployment,进入工作负载详情,下拉,在实例列表中可以看到pod的名称。

图 38 图 39

3.4 弹性伸缩Deployment

1. 编辑之前创建的nginx-deployment.yaml文件,将副本数量“replicas”改为5。

vim nginx-deployment.yaml

按“i”键进行编辑,编辑第8行replicas的内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.3
        ports:
        - containerPort: 80

2. 按Esc键退出编辑,输入":wq"保存并退出,然后应用变更后的nginx-deployment.yaml文件。

kubectl apply -f nginx-deployment.yaml

3. 查看pod状态,确认Pod数量是否正确。

kubectl get pod
图 40

4. 回到刚才实例列表页面,刷新一下可以看到pod实例扩展到5个了。

图 41

受环境影响,可能会有pod实例出现异常,可先做下面的实验。

5. 删除创建的deployment。

kubectl delete deployment nginx-deployment
图 42

4. DaemonSet实验

DaemonSet 可以做一个守护进程的控制器。此处实验以fluentd日志收集系统为例,进行部署。

4.1 使用DaemonSet

1. 创建文件夹,用于保存DemmonSet和Job文件。

mkdir /labfile/daemonfile
cd /labfile/daemonfile/

2. 创建DaemonSet的yaml文件。

vim DaemonSet.yaml

按“i”键进行编辑,内容如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemonset
  namespace: kube-system
  labels:
    k8s-app: nginx-daemonset
spec:
  selector:
    matchLabels:
      name: nginx-daemonset
  template:
    metadata:
      labels:
        name: nginx-daemonset
    spec:
      containers:
      - name: nginx-daemonset
        image: nginx:alpine

3. 按Esc键退出编辑,输入":wq"保存并退出,然后创建DaemonSet。

kubectl apply -f DaemonSet.yaml
图 43

4. 查看创建的DaemonSet。此处, 需要在命令行中通过--

namespace=kube-system指定namespace kube-system。若不指定,则只

返回默认namespace default中的资源。实验中只有一个Node节点,所以运行的daemonset也只有1个。

kubectl get daemonset --namespace=kube-system
图 44

5. 查看DaemonSet中Pod信息。

kubectl get pod --namespace=kube-system -o wide
图 45

6. 在CCE集群界面,点击左侧“工作负载”->“守护进程集”,在守护进程集中点击上边的命名空间,点击下拉箭头,选择kube-system。

可以点击工作负载名称,进入实例列表,查看实例的详情信息。

图 46

4.2 DaemonSet自动恢复

1. 删除任意一个Pod。

注意:用4.1步骤第(5)处查询的Pod名称替换下方命令中的【Pod名称】

kubectl delete pod [Pod名称] --namespace=kube-system
图 47

2. 查看DaemonSet自动恢复功能。

kubectl get pod --namespace=kube-system
图 48

3. 退出弹性云服务器ECS,本实验结束。

exit

至此,实验全部完成!