Kubernetes微认证实验的总结

举报
黄生 发表于 2021/06/18 16:55:36 2021/06/18
【摘要】 步骤非常的多,令人眼花缭乱,所以需要总结一下,以理清思路。使用到的服务:VPC\CCE\ECSVPC就不多说,用过华为云服务的都应该创建过,用以前建好的就可以吧。重点来了,购买CCE分为3个步骤,1是服务选型,这里注意版本,k8s一般3个月更新1次版本,CCE创建只支持最新的2个版本,所以教程上的版本可能会过时再就是网络模型,通常的场景选择“容器隧道网络”2是创建节点,类似于ECS服务器,没...

步骤非常的多,令人眼花缭乱,所以需要总结一下,以理清思路。
使用到的服务:VPC\CCE\ECS
VPC就不多说,用过华为云服务的都应该创建过,用以前建好的就可以吧。
重点来了,购买CCE
分为3个步骤,
1是服务选型,这里注意版本,k8s一般3个月更新1次版本,CCE创建只支持最新的2个版本,所以教程上的版本可能会过时
再就是网络模型,通常的场景选择“容器隧道网络”
2是创建节点,类似于ECS服务器,没特别的,
3是安装插件,使用默认
配的是3控制节点+2节点(沙箱实验是1控制节点+1节点)(整个实验中,并没有用到多管理节点的什么特性,所以自作主张将管理节点由3改为1)
在创建好了CCE后,再去下载命令行Client工具kubectl和配置文件,为什么不可以提前在规划时确定了k8s版本后就下载好呢?
这是因为配置文件kubeconfig.json是要在cce购买后才可以生成出来的
重点到这里就算结束了吧

这里有2个图,一个是购买的规格,一个是提交后的创建过程

然后,买一台ECS,不多说
再然后,是讲kubectl和配置文件上传到ECS的/home下,ssh登陆ECS,开始操作
各就各位后,环境准备好了,就可以操练kubectl命令了~

因为之前有一台鲲鹏的ECS,所以就用它了
一、POD

虽然实际中很少手工直接的做低级操作来创建POD,但是我们还是操练一下
**在ECS上准备好证书配置文件~/.kube/config和客户端命令kubectl:
kubectl config use-context internal
kubectl cluster-info
kubectl get nodes

上传配置文件 POD-1Container.yml
kubectl apply -f POD-1Container.yml
kubectl get pod -o wide
上面的命令看到NODE的IP后,SSH内网登陆到node节点

**在node上
docker container ls |grep nginx  #这里有一个 cce-pause:3.1 是干什么的呢?

**在ECS上:
kubectl delete pod nginx
kubectl get pod
kubectl get node
kubectl label nodes 上面命令输出的NAME列的值${IP} node=test  #给一个NODE打标签
kubectl describe node ${IP}  #输出很多,可以看到这个label
kubectl get node -l "node=test"  #可以按条件只列出这个node,但输出内容里没这个标签

上传配置文件POD-NodeSelector.yml
1apply 2get pod 检查POD运行的节点就是yml里指定的节点

上传POD-2Container.yml
1apply 2get pods/pod 查看two-containers这个POD运行所在的NODE的IP

**在node上
docker container ls |grep two-container

**在ECS上:
删除并检查 get pod; delete pod nginx/two-container; get pod

给一个截图是这样的,这是创建了2个POD,其中1个POD里1个容器,另1个POD里有2个容器。POD被分散到了2个NODE上。

二、Deployment
**在ECS上:
上传deployment.yml
1apply 2get deployment 3get pod 得到${NAME}
4.delete pod ${NAME}
5.get pod   #打不死的小强 又起来了一个
6.扩展deployment的pod数量到4
kubectl scale deployment.v1.apps/nginx-deployment --replicas=4
get pod, get deployment,
delete deployment nginx-deployment

三、StatefulSet
**在ECS上:
上传statefulset.yml
1apply 2get statefulset/pod 3describe pod 上面查询的POD的${NAME}
4delete pod ${NAME} #打不死的小强 

四、DeamonSet
**在ECS上:
上传daemonset.yml
1get ds -n kube-system 2apply 3get ds -n kube-system
4CCE>资源管理>节点管理 买一台节点
5get ds -n kube-system #新节点状态为可用后,所有ds实例数+1

另外CCE也提供了免费的CloudShell供使用,kubectl的环境是准备好了的,可以直接使用。
这样其实你不需要ECS机器来手工安装kubectl客户端了。


五、Job
**在ECS上:
上传job.yml
1apply 2get job 3get pod 4logs 上一步返回的POD的NAME #看JOB的日志输出
没有成功,分配到新买的节点上的。
kubectl logs pi-trbk6
Error from server (BadRequest): container "pi" in pod "pi-trbk6" is waiting to start: trying and failing to pull image
删除这个节点后,分配到已有节点时,pod一直处于ContainerCreating
kubectl logs pi-jrp6z
Error from server (BadRequest): container "pi" in pod "pi-jrp6z" is waiting to start: ContainerCreating
5分种后成功了Completed:
kubectl logs pi-jrp6z
3.14159265358979323846264....
那之前新买节点上pod一直ImagePullBackOff,可能是没有EIP的原因?

六、Service
使用deployment.yml
1apply 3expose deployment nginx-deployment --type=NodePort
4get service 得到${PORT},注意是冒号后的端口 5get node 得到NAME列${IP},任意一个NODE的都可以,感觉很神奇~
6curl ${IP}:${PORT}
7控制台看NODE绑定的公网IP,用浏览器访问,也是2个节点的都可以访问到。

七、NameSpace
1get namespace 2create namespace test 
4apply -f POD-1Container.yml --namespace=test 5get pod -n test

1create namespace quota-mem-cpu-example 
上传ns-cpu-mem.yml
1create -f ns-cpu-mem.yml -n quota-mem-cpu-example
2get resourcequota mem-cpu-demo -n quota-mem-cpu-example --output=yaml 这种输出格式,输出内容也多了
上传quote-mem-cpu-pod.yml
1create -f quota-mem-cpu-pod.yml -n quota-mem-cpu-example
2get pod quota-mem-cpu-demo -n ...
3get resourcequota...同上命令,注意used部分的变化,原来是0,现在就有值了
上传quote-mem-cpu-pod-2.yml
1.apply 同上。(apply 和create 像是可以混用)会报错forbidden:exceeded quota,还会给出quota使用明细。

最后是一个flappybird小游戏,无状态应用,比较简单。
但是没有成功,空闲内存是有的,但是无法分配了

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。