当前位置: 首页 > news >正文

k8s中pod的管理

资源管理介绍

在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务

所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。

kubernetes的最小管理单元是pod而不是容器,只能将容器放在Pod中,

kubernetes一般也不会直接管理Pod,而是通过Pod控制器来管理Pod的。

Pod中服务服务的访问是由kubernetes提供的Service资源来实现。

Pod中程序的数据需要持久化是由kubernetes提供的各种存储系统来实现

 1.1 资源管理方式

1.1.1 命令式对象管理


 

显示集群版本
kubectl version显示集群信息
kubectl cluster-info创建一个webcluster控制器,控制器中pod数量为2
kubectl create deployment webcluster --image nginx/nginx:latest --replicas 2查看资源帮助
kubectl explain deployment查看控制器参数帮助
kubectl explain deployment.spec编辑控制器配置
kubectl patch deployments.apps webcluster -p '{"spec": {"replicas":4}}'删除资源
kubectl delete deployments.apps webcluster运行和调试命令示例
运行pod
kubectl run testpod --image nginx/nginx:latest端口暴露
kubectl run testpod --image nginx/nginx:latestkubectl expose pod testpod --port 80 --target-port 80查看资源详细信息
kubectl describe pods testpod查看资源日志
kubectl logs pods/testpod运行交互pod
ctrl+pq退出不停止pod
kubectl run -it testpod --image busybox进入到已经运行的容器,且容器有交互环境
kubectl attach pods/testpod -it在已经运行的pod中运行指定命令
kubectl exec -it pods/testpod1 /bin/bash拷贝文件到pod中
kubectl cp testpod1.yml testpod1:/
kubectl exec -it pods/testpod1 /bin/bash复制pod中的文件到本机
kubectl cp testpod1:/testpod1.yml testpod1.yml运行非交互pod
kubectl run nginx --image nginx/nginx:latest

高级命令示例
利用命令生成yaml模板文件

kubectl create deployment --image nginx/nginx:latest webcluster --dry-run=client -o yaml > webcluster.yml
kubectl apply -f webcluster.yml

使用该文件
[root@k8s-master ~]# kubectl apply -f web.yml查看
[root@k8s-master ~]# kubectl get deployments.apps回收资源
[root@k8s-master ~]# kubectl delete -f web.yml命令修改
[root@k8s-master ~]# kubectl set image deployments/test myapp=myapp:v2[root@k8s-master ~]# kubectl rollout undo deployment test --to-revision 1

什么是pod

  • Pod是可以创建和管理Kubernetes计算的最小可部署单元
  • 一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。
  • 一个pod类似一个豌豆英,包含一个或多个容器(通常是docker)
  • 多个容器间共享IPC、Network和UTCnamespace。

2.1创建自主式pod(生产不推荐)

查看所有pods

kubectl get pods

建立一个名为timinglee的pod

kubectl run revkarl --image nginx/nginx:latest

 显示pod的较为详细的信息

kubectl get pods -o wide

 2.2 利用控制器管理pod(推荐)

建立控制器并自动运行pod

kubectl create deployment timinglee --image nginx/nginx:latest

2.3应用版本的更新 

利用控制器建立pod

kubectl create deployment timinglee --image myapp:v1 --replicas 2

暴露端口

kubectl expose deployment timinglee --port 80 --target-port 80
service/timinglee exposed

查看历史版本

kubectl rollout history deployment timinglee 

 更新控制器镜像版本

kubectl set image deployments/timinglee myapp=myapp:v2

 版本回滚

kubectl rollout undo deployment timinglee --to-revision 1

 2.4利用yaml文件部署应用

获得资源帮助
kubectl explain pod.spec.containers

示例:运行简单的单个容器pod

kubectl run timinglee --image myapp:v1 --dry-run=client -o yaml > pod.yml
kubectl apply -f pod.yml

运行多个容器pod

vim pod.yml
apiVersion: v1
kind: Pod
metadata:labels:run: timingleename: timinglee
spec:containers:- image: myapp:v1name: web1- image: myapp:v2name: web2

  在一个pod中开启多个容器时一定要确保容器彼此不能互相干扰

vim pod.yml
apiVersion: v1
kind: Pod
metadata:labels:run: timingleename: timinglee
spec:containers:- image: myapp:v1name: web1- image: busybox:latestname: web2command: ["/bin/sh","-c","sleep 1000000"]

pod的生命周期

3.1.init容器

  • Pod 可以包含多个容器,应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。
  • Init 容器与普通的容器非常像,除了如下两点:
    • 它们总是运行到完成
    • init 容器不支持 Readiness,因为它们必须在 Pod 就绪之前运行完成,每个Init 容器必须运行成功,下一个才能够运行。
  • 如果Pod的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到Init 容器成功为止。但是,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动。 

3.1.1INIT 容器的功能

  • Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。
  • Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。
  • 应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。
  • Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。
  • 由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。 

 init容器示例

kubectl run initpod --image myapp:v1 -o yaml > pod.yml
vim pod.yml
apiVersion: v1
kind: Pod
metadata:labels:run: initpodname: initpod
spec:containers:- image: myapp:v1name: myappinitContainers:- name: init-myserviceimage: busyboxcommand: ["sh","-c","until test -e /testfile;do echo wating for myservice;sleep 2;done"]

 

 探针

3.1 探针实例

3.1.1存活探针示例:

[root@k8s-master ~]# vim timinglee.yml
apiVersion: v1
kind: Pod
metadata:labels:run: livenessname: liveness
spec:containers:- image: reg.zx.org/library/myapp:v1name: myapplivenessProbe:tcpSocket:port: 8080initialDelaySeconds: 3periodSeconds: 1timeoutSeconds: 1[root@k8s-master ~]# kubectl apply -f readiness.yml 
pod/liveness created
[root@k8s-master ~]# kubectl get pods

3.1.2就绪探针示例:

[root@k8s-master ~]# vim readiness.yml apiVersion: v1
kind: Pod
metadata:labels:run: readnessname: liveness
spec:containers:- image: myapp:v1name: myappreadnessProbe:httpGet:path:/test.htmlport: 80initialDelaySeconds: 1periodSeconds: 3timeoutSeconds: 1[root@k8s-master ~]# kubectl apply -f readiness.yml 
pod/readiness created
[root@k8s-master ~]# kubectl get pods
NAME        READY   STATUS             RESTARTS        AGE
init-test   1/1     Running            0               30m
liveness    0/1     CrashLoopBackOff   9 (3m58s ago)   15m
readiness   0/1     Running            0               10s[root@k8s-master ~]# kubectl expose pod readiness --port 80 --target-port 80[root@k8s-master ~]# kubectl describe pods readiness[root@k8s-master ~]# kubectl describe services readiness
Name:              readiness
Namespace:         default
Labels:            run=readiness
Annotations:       <none>
Selector:          run=readiness
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.101.55.183
IPs:               10.101.55.183
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:                         #没有暴漏端口,就绪探针探测不满足暴漏条件
Session Affinity:  None
Events:            <none>[root@k8s-master ~]# kubectl exec pods/readiness -c myapp -- /bin/sh -c "echo test > /usr/share/nginx/html/test.html"[root@k8s-master ~]# kubectl get pods
NAME        READY   STATUS             RESTARTS       AGE
init-test   1/1     Running            0              42m
liveness    0/1     CrashLoopBackOff   15 (42s ago)   27m
readiness   1/1     Running            0              3m13s[root@k8s-master ~]# kubectl describe service readiness
Name:              readiness
Namespace:         default
Labels:            run=readiness
Annotations:       <none>
Selector:          run=readiness
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.101.75.183
IPs:               10.101.75.183
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.44:80      #满组条件端口暴漏
Session Affinity:  None
Events:            <none>

http://www.mrgr.cn/news/46777.html

相关文章:

  • 从epoll事件的视角探讨TCP:三次握手、四次挥手、应用层与传输层之间的联系
  • 实力认证 | 海云安入选《信创安全产品及服务购买决策参考》
  • uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?
  • 太原理工大学软件设计与体系结构 --javaEE
  • 汇总统计数据--SQL中聚集函数的使用
  • CSS:定位
  • Python案例--copy复制
  • 手写一个内存池-页内分配
  • 【CSS3】css开篇基础(2)
  • umap结果不能复现
  • linux基础-------堡垒机与跳板机
  • 【LeetCode】修炼之路-0004-Median of Two Sorted Arrays【python】
  • keil5| printf()函数 | 使用技巧 | STM32|UARST串口输出
  • 逼近理论及应用精解【11】
  • JS中的异步和Promise
  • 算法.图论-bfs及其拓展
  • k8s、prometheus、grafana数据采集和展示的链路流程
  • 「字符串」Z函数(扩展KMP|exKMP)/ LeetCode 2223(C++)
  • 基于SpringBoot问卷调查系统小程序【附源码】
  • Linux系统中,文件和文件夹的权限和所有权核心概念
  • 汇编语言_王爽_寄存器
  • Kubernetes 探秘:深入理解 StatefulSet 的拓扑状态
  • house_of_muney
  • 如何在两台服务器之间迁移 MySQL 数据库
  • 肺腺癌预后新指标:全切片图像中三级淋巴结构密度的自动化量化|文献精析·24-10-09
  • QCompleter Class