华为云云容器实验——轻松玩转Kubernetes
Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐。很多新手部署Kubernetes由于“科学上网”问题举步维艰,云容器引擎CCE是基于K8S和Docker的企业级容器服务,为企业应用提供快速部署、自动化运维、弹性伸缩等容器生命周期管理能力。点击 开始实验
实验目标
通过完成本实验,体验Kubernetes环境搭建和核心概念。
实验背景
Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化容器化应用程序的部署、扩展和管理。它提供了一种容器化的应用程序编排和管理的机制,使得应用程序能够以可靠、可伸缩的方式运行在容器集群上。
Kubernetes的核心概念包括节点(Node)、部署(Deployment)、服务(Service)等。节点是指运行容器的物理或虚拟机,部署是指运行在节点上的应用程序副本,服务是指将应用程序暴露给外部访问的机制。
使用Kubernetes,可以通过创建部署和服务的对象来实现自动化部署、自动扩缩容、服务发现等功能。它还提供了许多其他高级特性,如自动修复、滚动更新和密钥管理。
实验步骤
1 登录云账户
进入【实验操作桌面】,打开 Chrome 浏览器,选择【IAM用户登录】模式,于登录对话框中输入系统为您分配的华为云实验账号和密码登录华为云,如下图所示:
▶ 注意:账号信息详见实验手册上方,切勿使用您自己的华为云账号登录。
2 Kubernetes环境搭建和基础管理
2.1 Kubernetes环境搭建
➤ 步骤 1 打开华为公有云:https://www.huaweicloud.com/,输入账号和密码进行登录。
➤ 步骤 2 保证区域在北京四区域,点击左上角控制台,进入华为云控制台,选择所有服务>计算,单击云容器引擎CCE。
➤ 步骤 3 页面跳转至CCE控制台,右上角点击购买
➤ 步骤 4 按照以下参数配置Kubernetes集群信息。完成配置后,单击下一步。
基础配置如下:
集群类型:CCE Standard集群
计费模式:按需付费
集群名称:k8s-demo
集群版本:请选择v1.25版本
集群规模:50节点
集群master实例数:单实例
网络配置如下:
虚拟私有云:vpc-k8s
子网:subnet-net-k8s
安全组:选择已有的,sg-hce
容器网络模型:容器隧道网络
容器网段:自动设置网段
其余保持默认,点击下一步,插件选择以及插件配置都默认,继续下一步到确认配置,勾选我已阅读统一并知晓上述使用说明并提交购买。
➤ 步骤 5 待CCE集群创建完成后,返回CCE控制台点击创建节点
按照以下信息配置节点参数,完成配置后单击下一步。
计费模式:按需计费
可用区:可用区一
节点类型:弹性云服务器-虚拟机
节点规格:通用型s6.xlarge.2 /4核8GB(若实验时,官网无此规格,可选相近规格节点,实验不受影响)
容器引擎:docker
操作系统:公共镜像/CentOS7.6
节点名称:k8s-demo-node
登录方式:密码(自定义符合要求的密码)
存储配置:默认即可
网络配置:弹性公网IP选择自动创建|全动态BGP|按流量计费|5Mbit/s
节点购买数量:2
其余默认,点击下一步,勾选我已阅读同意并提交
等待集群状态由创建中变为正常,可用节点数为2,此时Kubernetes环境搭建完成。
2.2 Kubernetes环境管理
2.2.1 进行Kubectl及配置文件下载
➤ 步骤 1 单击cce集群,进入集群管理页面。
➤ 步骤 2 点击左边总览下配置中心条,在配置中心界面,点击集群访问配置 > 配置,在kubectl访问页面,将配置文件格式更改为“JSON”后,单击下载,获取kubectl配置文件。
2.2.2 Kubectl服务器配置
➤ 步骤 1 进入华为云控制台,点击服务列表,进入ecs控制台,记录预置好的ecs服务器公网IP
➤ 步骤 2 打开本地xfce终端,将下载的kubectl配置文件上传到预置好的ecs服务器的/home目录下
scp /home/user/Downloads/k8s-demo-kubeconfig.json root@ECS的IP:/home
预置的服务器密码如下:
➤ 步骤 3 通过ssh链接预置好的ecs服务器后,分别执行以下命令:
cd /home
wget https://sandbox-experiment-files.obs.cn-north-4.myhuaweicloud.com/2947/kubectl
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version
执行以下命令,新建 .kube 目录和 config 文件,并复制步骤4中下载的 kubeconfig.json 文件内所有的内容到 config 文件。
cd /home
mkdir -p $HOME/.kube
mv /home/k8s-demo-kubeconfig.json $HOME/.kube/config
➤ 步骤 4 此次为VPC内接入访问,因此请执行以下命令。
kubectl config use-context internal
➤ 步骤 5 通过以下命令查看kubernetes集群信息。
kubectl cluster-info
➤ 步骤 6 通过以下命令获取集群节点信息。
kubectl get nodes
至此完成kubectl的基本配置
3 Kubernetes核心概念实践
3.1 POD实践
该小节通过实践Kubernetes核心概念中的Pod,可以深入了解容器编排和管理的关键概念和技术,为构建高效、可靠和可扩展的容器化应用程序打下基础
➤ 步骤 1 下载预备好的yml文件并解压(该文件是已编辑好的yml文件)
cd /home
wget https://sandbox-experiment-files.obs.cn-north-4.myhuaweicloud.com/2947/software%26yaml.zip
unzip software\&yaml.zip
ll software\&yaml
➤ 步骤 2 通过以下命令创建POD。
cd /home/software\&yaml
kubectl apply -f POD-1Container.yml
➤ 步骤 3 通过以下命令查看POD的运行状态为Running。
kubectl get pod
➤ 步骤 4 通过以下命令查看POD运行在哪台弹性云服务器上。
kubectl get pod -o wide
➤ 步骤 5 当前实行ssh NodeIP命令,登录到node节点。
ssh 192.168.0.*
(换成自己实践时的私网地址)
注意: 密码为前面购买集群节点时的密码。
➤ 步骤 6 执行以下命令查看此节点上与刚刚创建POD相关容器实例的信息。
docker container ls |grep nginx
注意:通过观察可以发现容器名称带有nginx的有两个,一个使用的镜像名称为nginx,另外一个容器使用的镜像名称。
➤ 步骤 7 输入exit退出Node节点。
exit
➤ 步骤 8 然后执行以下命令删除POD并确认删除成功。
kubectl delete pod nginx
kubectl get pod
3.1.2 指定POD运行到指定的NODE上
➤ 步骤 1 通过以下命令查看NODE节点信息。
kubectl get node
➤ 步骤 2 通过以下命令给第一个节点打上node=test的标签。
kubectl label nodes 192.168.0.129 node=test
(换成自己node节点的IP地址)
kubectl describe nodes 192.168.0.129
➤ 步骤 3 通过以下命令查看集群中带有node=test标签的节点信息。
kubectl get node -l "node=test"
➤ 步骤 4 查看文件是否上传。
ls
cat POD-NodeSelector.yml
➤ 步骤 5 运行以下命令创建POD。
kubectl apply -f POD-NodeSelector.yml
➤ 步骤 6 查看并确认POD运行节点是否为指定的节点。
kubectl get pod -o wide
3.1.3 创建POD2(1POD:2容器)
➤ 步骤 1 确认文件上传。
ls
cat POD-2Container.yml
➤ 步骤 2 通过以下命令创建POD。
kubectl apply -f POD-2Container.yml
➤ 步骤 3 通过以下命令查看POD运行状态。
kubectl get pods
➤ 步骤 4 通过以下命令查看POD运行在哪个Node上。
kubectl get pod -o wide
➤ 步骤 5 SSH登录到POD所在的节点。
ssh 192.168.0.193
➤ 步骤 6 通过以下命令查看和my-app-pod相关的容器。
docker container ls | grep two-container
➤ 步骤 7 退出node节点。
exit
➤ 步骤 8 查看kubernetes集群POD信息并删除。
kubectl get pod
kubectl delete pod nginx
kubectl delete pod two-containers
kubectl get pod
3.2 Deployment实践
该小节通过实践Kubernetes的Deployment,可以深入了解声明式更新、弹性伸缩、回滚操作、监控和日志以及集成其他服务等关键概念和技术。
➤ 步骤 1 查看文件内容。
ls
cat deployment.yml
➤ 步骤 2 通过以下命令创建depolyment。
kubectl apply -f deployment.yml
➤ 步骤 3 通过以下命令查看deployment状态。
kubectl get deployment
➤ 步骤 4 通过以下命令查看POD。
kubectl get pod
➤ 步骤 5 通过以下命令手动删除上述查看到的POD(按照实际查询更换pod)。
kubectl get pod
kubectl delete pod nginx-deployment-67d4b848b4-sghfq
➤ 步骤 6 再次查看POD。
kubectl get pod
➤ 步骤 7 通过以下命令扩展Deployment数量至4。
kubectl scale deployment.v1.apps/nginx-deployment --replicas=4
kubectl get pod
➤ 步骤 8 再次查看deployment状态和数量。
kubectl get deployment
➤ 步骤 9 通过以下命令删除deployment并查看。
kubectl delete deployment nginx-deployment
kubectl get deployment
➤ 步骤 10 再次查看POD。
kubectl get pod
3.3 StatefulSet实践
该小节通过实践Kubernetes的StatefulSet,了解有状态应用的部署和管理、顺序部署和扩展、自动修复和自我保护、持久化存储管理和网络配置等关键概念和技术。
➤ 步骤 1 查看文件是否正确上传。
ls
cat statefulset.yml
➤ 步骤 2 通过以下命令创建StatefulSet。
kubectl apply -f statefulset.yml
➤ 步骤 3 通过以下命令查看StatefulSet的运行状态。
kubectl get statefulset
➤ 步骤 4 通过以下命令查看POD数量和名称。
kubectl get pod
➤ 步骤 5 通过以下命令查看web-0的POD的名称、IP地址和所在的节点信息。
kubectl describe pod web-0
➤ 步骤 6 手动删除名称为web-0的POD。
kubectl delete pod web-0
➤ 步骤 7 等待一会再次查看POD。
kubectl get pod
➤ 步骤 8 再次查看web-0的POD的名称、IP地址和所在的节点信息是够发生变化。
kubectl describe pod web-0
重复删除web-0发现StatefulSet的POD IP、名称和所在节点的规律。
➤ 步骤 9 删除创建的StatefulSet
kubectl delete StatefulSet web
3.4 DaemonSet实践
该小节通过实践Kubernetes的DaemonSet,了解守护进程管理、节点级别运行、自动修复和自我保护、节点选择器和集成其他服务等关键概念和技术。
➤ 步骤 1 通过以下命令查看kube-system命令空间中的DaemonSet。
kubectl get ds -n kube-system
➤ 步骤 2 通过以下命令创建daemonset。
kubectl apply -f daemonset.yml
➤ 步骤 3 再次查看kube-system中的DaemonSet。
kubectl get ds -n kube-system
➤ 步骤 4 返回华为云CCE控制台,选择资源管理>节点管理,单击购买节点。
➤ 步骤 5 购买节点信息如下,确认信息后,单击提交按钮。
计费模式:按需计费
可用区:可用区一
节点类型:弹性云服务器-虚拟机
节点规格:通用型s6.xlarge.2 /4核8GB(若实验时,官网无此规格,可选相近规格节点,实验不受影响)
容器引擎:docker
操作系统:公共镜像/CentOS7.6
节点名称:k8s-demo-node
登录方式:密码(自定义符合要求的密码)
存储配置:默认即可
网络配置:弹性公网IP选择自动创建|全动态BGP|按流量计费|5Mbit/s
节点购买数量:1
➤ 步骤 6 等待节点创建完,返回服务器,通过命令行查看各个DaemonSet实例数是不是3。
kubectl get ds -n kube-system
3.5 Job实践
该小节通过实践Kubernetes的Job,了解批处理任务调度、一次性任务、任务依赖管理、失败处理和重试以及集成其他服务等关键概念和技术
➤ 步骤 1 通过以下命令运行Job。
kubectl apply -f Job.yml
➤ 步骤 2 通过以下命令查看job运行状态。
kubectl get job
➤ 步骤 3 通过以下命令查看是否有pi开头的POD。
kubectl get pod
➤ 步骤 4 通过以下命令查看此Job的输出。
kubectl logs pi-c5pgr
➤ 步骤 5 通过以下命令删除job
kubectl delete job pi
3.6 Service实践
该小节通过实践Kubernetes的Service,了解服务发现和负载均衡、集群内部通信、外部访问、自动扩缩容、路由规则和策略等关键概念和技术
➤ 步骤 1 通过之前上传的deployment文件创建Deployment。
kubectl apply -f deployment.yml
➤ 步骤 2 通过命令行查看Deployment状态和POD状态。
kubectl get deployment
kubectl get pod
➤ 步骤 3 用户通过命令行创建NodePort类型的Service并查看。
kubectl expose deployment nginx-deployment --type=NodePort
kubectl get service
➤ 步骤 4 通过curl命令验证网站是否可以访问。(任意一个Kubernetes NODE节点地址都行。)
kubectl get node
curl 192.168.0.227:30302
(注意端口号为上一步查看到的NodePort)
➤ 步骤 5 通过华为云控制台查看其中一个kubernetes Node绑定的公网地址。
➤ 步骤 6 打开浏览器,输入ECS绑定的公网地址+Service的Nodeport。如本示例中为:任意node节点EIP:NodePort
3.7 NameSpace实践
该小节通过实践Kubernetes的Namespace,了解命名空间隔离、资源配额管理、访问控制和权限管理、命名空间切换以及集成其他服务等关键概念和技术
3.7.1 默认的NameSpace实践
➤ 步骤 1 通过以下命令查看系统默认的NameSpace。
kubectl get namespace
➤ 步骤 2 通过以下命令可以手动的创建一个NameSpace命名空间并查看。
kubectl create namespace test
kubectl get namespace
➤ 步骤 3 创建一个POD并指定此POD运行在test命名空间。
ll
kubectl apply -f POD-1Container.yml --namespace=test
➤ 步骤 4 查看指定命名空间里的POD。
kubectl get pod -n test
3.7.2 创建一个限制CPU和内存大小的NameSpace。
➤ 步骤 1 通过以下命令创建一个Namespace。
kubectl create namespace quota-mem-cpu-example
kubectl get ns
➤ 步骤 2 通过以下命令查看文件信息。
ls
cat ns-cpu-mem.yml
➤ 步骤 3 创建ResourceQuota并和NameSpace进行关联。
kubectl create -f ns-cpu-mem.yml --namespace=quota-mem-cpu-example
➤ 步骤 4 查看ResourceQuota详细信息。
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
3.7.3 添加限制
以上刚创建的ResourceQuota对象将在quota-mem-cpu-example名字空间中添加以下限制:
每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
所有容器的内存请求总额不得超过1 GiB。
所有容器的内存限额总额不得超过2 GiB。
所有容器的CPU请求总额不得超过1 CPU。
所有容器的CPU限额总额不得超过2 CPU
➤ 步骤 1 查看POD定义文件。
ll
cat quota-mem-cpu-pod.yml
➤ 步骤 2 创建POD。
kubectl create -f quota-mem-cpu-pod.yml --namespace=quota-mem-cpu-example
➤ 步骤 3 运行以下命令确认POD已运行。
kubectl get pod quota-mem-cpu-demo --namespace=quota-mem-cpu-example
➤ 步骤 4 然后再次查看ResourceQuota对象的详细信息:
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
➤ 步骤 5 查看并确认。
ll
cat quota-mem-cpu-pod-2.yml
➤ 步骤 6 通过以下命令创建第二个POD。
kubectl apply -f quota-mem-cpu-pod-2.yml --namespace=quota-mem-cpu-example
以下命令输出显示第二个Pod并没有创建成功。错误信息说明了如果创建第二个Pod,内存请求总额将超出名字空间的内存请求配额。
至此实验结束,通过该实践Kubernetes实验,了解容器编排、资源调度、服务发现和负载均衡、存储编排、网络配置和管理、安全和认证以及日志和监控等关键概念和技术。
【更多华为云云原生干货推荐】华为云云原生王者之路集训营
华为云云原生王者之路集训营
为帮助广大技术爱好者快速掌握云原生相关技能,华为云云原生团队与华为云学院联合CNCF开源软件大学启动人才培养计划,推出《华为云云原生王者之路集训营》,从云原生基础知识介绍到最佳实践讲解、底层原理和方案架构深度剖析,层层深入,满足不同云原生技术基础和学习目标人群的需求。本课程还精选数十个企业典型应用场景,作为学员上机实践案例,帮助学员将所学技术快速与企业业务相结合,服务于企业生产。
点击免费参加华为云云原生王者之路集训营:https://edu.huaweicloud.com/roadmap/cloudnative1.html 学习后记得小试牛刀,看看测评效果~ 华为云云原生王者之路-黄金课程测评 华为云云原生王者之路-钻石课程测评 华为云云原生王者之路-王者课程测评
- 点赞
- 收藏
- 关注作者
评论(0)