资料详情

Kubernetes集群多容器POD实验报告

头像

理工论文

编号:11174
ottom: 0px; -ms-text-justify: inter-ideograph;">28. # List all replication controllers and services together in ps output format.

29. kubectl get rc,services

30.

31. # List one or more resources by their type and names.

32. kubectl get rc/web service/frontend pods/web-pod-13je7

查看容器日志的命令:

1. kubectl logs hpe-myweb

进入容器的命令:

1. kubectl exec -ti hpe-myweb -- bash

查看帮助信息:

1. kubectl get -h

,

实验报告

目录

一、 课堂练习

实践 ― 启动Kubernetes集群

5) 删除Pod $ kubectl delete pod hpe-myweb

实践 ― Pod实践(续)

1) 创建hpe-mysql Pod

2) 创建hpe-myweb Pod

3) 访问hpe-myweb Pod

1) RC的创建和删除

2) Pod故障自动恢复

3) Pod副本扩容和缩容

4) 容器应用滚动升级

二、 课后作业

1. 完成课堂实践要求的练习,包括pod、rc等操作,要求截图

5. Pod内的容器端口号有哪几种设置,各自的差异是什么?

8. 描述RC可以实现的主要功能

1、查看已有pod的label标签。

一、 课堂练习

实践 ― 启动Kubernetes集群

代码:

1) 启动集群:./1-start.sh

2) 验证:kubectl get nodes

运行截图:

实践 ― Pod实践

代码:

1) Pod的创建 $ kubectl create -f hpe-myweb-pod.yaml $ kubectl get pods

2) Pod的日志 $ kubectl logs hpe-myweb

3) 登录进入Pod $ kubectl exec -ti hpe-myweb -- bash

4) 查看Pod详细信息 $ kubectl describe pod hpe-myweb

5) 删除Pod $ kubectl delete pod hpe-myweb

运行截图:

1、启动集群+Pod创建

2、Pod日志

3、进入Pod

4、查看Pod详细信息

5、删除Pod

实践 ― Pod实践(续)

代码:

1) 创建hpe-mysql Pod

a) $ kubectl create -f hpe-mysql-pod.yaml

b) $ kubectl describe pod hpe-mysql

c) 查看pod的IP:172.17.1.2

2) 创建hpe-myweb Pod

a) $ vi hpe-myweb-pod.yaml env: - name: MYSQL_SERVICE_HOST value: '172.17.1.2'

b) $ kubectl create -f hpe-myweb-pod.yaml

3) 访问hpe-myweb Pod

a) $ kubectl exec -ti hpe-myweb -- bash

b) $ curl http://localhost:8080/demo/

运行截图:

1、创建hpe_mysql Pod,IP为10.1.95.6

2、创建hpe-myweb Pod

3、访问hpe-myweb Pod

实践 ― RC的应用

代码:

1) RC的创建和删除

a) $ kubectl create -f hpe-myweb-v1-rc.yaml

b) $ kubectl get rc,pods 查看RC的详细信息,查看event事件

c) $ kubectl describe rc hpe-myweb

2) Pod故障自动恢复

a) $ kubectl delete pod hpe-myweb-atkft

b) $ kubectl get pods

3) Pod副本扩容和缩容

a) $ kubectl scale rc hpe-myweb --replicas=3

4) 容器应用滚动升级

a) $ kubectl rolling-update --poll-interval=2s --update-period=2s hpe-myweb -- image=myweb_image:v2

运行截图:

1、RC的创建和删除

2、Pod故障自动恢复

3、Pod副本扩容和缩容

4、容器应用滚动升级

二、 课后作业

题目:

1. 完成课堂实践要求的练习,包括pod、rc等操作,要求截图

解答:

见上面课堂作业部分

题目:

2. 一个Pod内多个容器可用于哪些应用场景?(对应KEM的哪些功能)

解答:

应用场景:

多容器POD的主要用途是支持主要应用程序的共定位、共管辅助进程。在一个POD中有多个容器,使它们相对简单地进行通信。

Ø Sidecar containers:"帮助"主容器,比如日志文件监视器.一个日志监视器构建完成以后,可以由不同的应用来使用.另一个示例是sidecar 容器为主容器加载文件和运行需要的数据

Ø 代理,桥接和适配器:使主容器与外部世界联通.比如Apache http服务器或者nginx可承载静态文件.也可以做为一个web的反向代理服务器.

题目:

3. 运行中的一个Pod实际由几个容器组成,分别提供什么功能?

解答:

组成:

每一个pod的组成是由一个或者多个业务容器加上一个称之为“根容器”的pause容器构成。

功能:

业务容器提供不同的业务功能,pause根容器可以代表整个pod容器组的状态,利于我们准确的掌握整个pod的状态。

题目:

4. 已部署的pod的yaml如何查看,系统比用户提交的yaml补充了哪些内容?哪些字段表示“状态”信息,分别代表什么含义?

解答:

查看方式:

使用该命令查看已部署pod的yaml:kubectl get pod hpe-myweb -o yaml

补充内容:

Ø 在metadata中补充了annotations、creationTimestamp、managedFields、namespace、ownerReferences、resourceVersion、selfLink、uid等信息。

Ø 在spec中补充了dnsPolicy、enableServiceLinks、nodeName、preemptionPolicy、priority等信息。

状态信息:

此外还补充了status状态信息,内容为:

1. - lastProbeTime: null

2.    lastTransitionTime: "2021-06-27T04:23:39Z"

3.    status: "True"

4.    type: Initialized

5.  - lastProbeTime: null

6.    lastTransitionTime: "2021-06-27T04:23:41Z"

7.    status: "True"

8.    type: Ready

9.  - lastProbeTime: null

10.    lastTransitionTime: "2021-06-27T04:23:41Z"

11.    status: "True"

12.    type: ContainersReady

13.  - lastProbeTime: null

14.    lastTransitionTime: "2021-06-27T04:23:39Z"

15.    status: "True"

16.    type: PodScheduled

17.  containerStatuses:

18.  - containerID: docker://441bf2642a0da09f73c5343cf55fcca50daa4f0e

19.    image: myweb_image:v1

20.    imageID: docker://sha256:8362178fdb14bc045f2305de960522ae57edf

21.    lastState: {}

22.    name: myweb

23.    ready: true

24.    restartCount: 0

25.    started: true

26.    state:

27.      running:

28.        startedAt: "2021-06-27T04:23:40Z"

29.  hostIP:  192.168.18.3(主机ip地址)

30.  phase: Running(运行状态)

31.  podIP:  10.1.95.7(创建pod的ip)

32.  podIPs:

33.  - ip:  10.1.95.7

34.  qosClass: BestEffort

35.  startTime: "2021-06-27T04:23:39Z"(开始使用的时间)

题目:

5. Pod内的容器端口号有哪几种设置,各自的差异是什么?

解答:

设置:

1. ports:                //容器需要暴露的端口号列表

2.     - name: String        //端口的名称

3.       containerPort: int  //容器要暴露的端口

4.       hostPort: int       //容器所在主机监听的端口(容器暴露端口映射到宿主机的端口),默认与containerPort相同,设置hostPort时,同一台主机将无法启动该容器的第二个副本

5.       protocol: String    //端口协议,支持TCP和UDP,默认为TCP

差异:

containerPort是容器要暴露的端口,而hostPort是容器所在主机监听的端口,protocol是端口协议(包含TCP和UDP),name则是端口名称。

containerPort实际上就是容器自身的端口,而hostPort则是containerPort映射到宿主机上的端口,这个我们可以在虚拟机中的端口映射里进程修改。

题目:

6. Pod内的容器可以使用哪些volume类型,各种volume的主要特点是什么?各种volume类型数据保存在什么位置?

解答:

类型与特点:

Ø Kubernetes 支持很多类型的卷,Pod可以同时使用任意数目的卷类型。

Ø 临时卷类型的生命周期与Pod相同,但持久卷可以比 Pod 的存活期长。

Ø 当 Pod 不再存在时,Kubernetes 也会销毁临时卷;不过 Kubernetes 不会销毁持久卷。

Ø 对于给定Pod中任何类型的卷,在容器重启期间数据都不会丢失。

保存位置:

Cache或appdata中,和类型(临时卷或长期卷)有关。

题目:

7. 部署一个Pod,包含2个容器,设置一个2个容器都可以访问的volume,在一个容器中写文件,另一个容器中读文件的内容,要求截图

解答:

1、启动two-container-pod.yaml,可以看到debian容器被终止而nginx服务器仍然在运行,在debian容器中写入下面这句话(这是two-containers中的内容)

2、可以看到,two-containers中有2个pods

3、进入nginx容器,先安装一下指令

4、 debian容器在nginx的根目录下创建了index.html文件。使用curl向 nginx 服务器发送一个GET请求,输出结果表示nginx提供了debian容器写的页面。

题目:

8. 描述RC可以实现的主要功能

解答:

主要功能:保证Pod的数量、健康,弹性收缩等。

RC(Replication Controller)保证了在所有时间内,都有特定数量的Pod副本在运行:如果太多了,RC就杀死几个;如果太少了,RC会新建几个。

与直接创建pod不同的是,RC会替换掉那些删除的或者被终止的pod,不管删除的原因是什么。

题目:

9. 描述Label的主要功能,给RC和Pod设置Label,设置有关联和无关联的两种情况,要求截图

解答:

Label主要功能:

Label(标签)是Kubernetes中一个核心个概念,一个Label是一个key=value的键值对,其中key与value都是用户自定义的。Label可以添加到各种资源对象上,如Node、Pod、Service、RC等。Label通常在资源对象定义时确定,也可以在对象创建后动态添加或删除。通常通过给指定的资源对象捆绑一个或多个不同的Label来实现多维度的资源分组管理功能。这里的Label是将rc和对应的pod匹配起来。

过程:

1、查看已有pod的label标签。

2、查看已有rc的label标签,这个时候有三个pod是与rc有关联的。rc也是为了确保pod中有三个label为app=hpe-myweb的pod。

3、改写其中一个pod的Label标签并查看pod的信息和标签,发现hpe-myweb和rc已经无关联,所以rc又生成一个新的hpe-myweb,标签为app=hpe-myweb。

4、将该pod的label恢复,由于rc的存在,要保证里面只有3个pod所以恢复原样。

题目:

10. 描述workload控制器RC、Deployment、Daemonset、Statefulset的特点和功能

解答:

RC:

Ø 管理Pod

Ø 保证Pod的数量、健康,弹性收缩

Deployment:

Ø 部署无状态应用

Ø 管理Pod和ReplicaSet

Ø 具有上线部署、副本设定、滚动升级、回滚等功能

Ø 提供声明式更新,例如只更新一个新的Image

StatefulSet:

Ø 部署有状态应用

Ø 每个节点都有固定身份ID

Ø 集群的规模比较固定

Ø 如果磁盘损坏,集群内的某个节点无法运行

DaemonSet:

Ø 在每一个Node上运行一个Pod

Ø 新加入的Node也同样会自动运行一个Pod

题目:

11. 描述Job、Cronjob的特点和功能,以及与其他控制器的主要区别

解答:

特点和功能:

Ø Job:负责批量处理短暂的一次性任务,仅执行一次,并保证处理的一个或者多个Pod成功结束。

Ø Cronjob:负责定时任务,在指定的时间周期运行指定的任务。

与其他控制器区别:

Job作为Kubernetes中用于处理任务的资源,与其他的资源没有太多的区别,它也使用 Kubernetes 中常见的控制器模式,监听Informer中的事件并运行syncHandler同步任务

而CronJob由于其功能的特殊性,每隔 10s会从apiserver中取出资源并进行检查是否应该触发调度创建新的资源,需要注意的是CronJob并不能保证在准确的目标时间执行,执行会有一定程度的滞后。

题目:

12. 网上查询资料,描述Deployment、Daemonset、Statefulset的滚动升级策略和区别

解答:

Deployment控制器:

Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。

典型的应用场景:

Ø 用来创建Pod和ReplicaSet

Ø 滚动更新和回滚

Ø 扩容和缩容

Ø 暂停与恢复

DaemonSet控制器:

DaemonSet确保全部(或者某些)节点上运行一个Pod的副本。当有节点加入集群时,也会为他们新增一个Pod。当有节点从集群移除时,这些Pod也会被回收。删除 DaemonSet将会删除它创建的所有Pod。

DaemonSet的典型用法:

Ø 在每个节点上运行集群存储DaemonSet, 例如glusterd、ceph

Ø 在每个节点上运行日志收集DaemonSet,例如fluentd、logstash

Ø 在每个节点上运行监控DaemonSet,例如Prometheus Node Exporter、zabbix agent等

Ø 一个简单的用法是在所有的节点上都启动一个DaemonSet,将被作为每种类型的daemon使用。

Ø 一个稍微复杂的用法是单独对每种daemon类型使用多个DaemonSet,但具有不同的标志,并且对不同硬件类型具有不同的内存、CPU要求。

StatefulSet控制器:

StatefulSet是用来管理有状态应用的工作负载API对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用"。

StatefulSet用来管理Deployment和扩展一组Pod,井且能为这些Pod提供*序号和唯一性保证*。

StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:

Ø 稳定的、唯一的网络标识符。

Ø 稳定的、持久的存储。

Ø 有序的、优雅的部署和缩放。

Ø 有序的、自动的滚动更新。

题目:

13. kubectl get 命令查看常见的资源对象有哪些,有什么缩写?查看容器日志的命令?进入容器内的命令?如何查看帮助信息?

解答:

Get命令查看对象:

1. # List all pods in ps output format.

2. kubectl get pods

3.

4. # List all pods in ps output format with more information (such as node name).

5. kubectl get pods -o wide

6.

7. # List a single replication controller with specified NAME in ps output format.

8. kubectl get replicationcontroller web

9.

10. # List deployments in JSON output format, in the "v1" version of the "apps" API group:

11. kubectl get deployments.v1.apps -o json

12.

13. # List a single pod in JSON output format.

14. kubectl get -o json pod web-pod-13je7

15.

16. # List a pod identified by type and name specified in "pod.yaml" in JSON output format.

17. kubectl get -f pod.yaml -o json

18.

19. # List resources from a directory with kustomization.yaml - e.g. dir/kustomization.yaml.

20. kubectl get -k dir/

21.

22. # Return only the phase value of the specified pod.

23. kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}

24.

25. # List resource information in custom columns.

26. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image

27.

  全套毕业设计论文现成成品资料请咨询