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

pod生命周期,pod控制器service

一:pod-demo.yml

apiVersion: v1    #  <string>
kind: Pod         #  <string>
metadata:         # <Object>对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)name: pod-demonamespace: default#namespace: myapp-nslabels:           # <map[string]string>  映射数据不能加- 不是列表app: myapptier: frontend
spec:   #   <Object>containers:  #  <[]Object> 对象列表用-引导  对象数组  数组用-引导- name: myappimage: ikubernetes/myapp:v1ports:         #<[]Object>- name: http          # <string>containerPort: 80   #<integer>- name: httpscontainerPort: 443- name: busyboximage: busybox:latestcommand:     # 列表  <[]string>      #替换docker中的entrypoint。- "/bin/sh" - "-c"- "sleep 3600"

二:端口 port

kubectl edit svc myapp-svc
type:NodePort
80:30636/TCPports:- nodePort: 32000    #pod 端口  不定义为随机。port: 800          #集群内访问端口。svc内部端口protocol: TCPtargetPort: 80     #容器端口selector:run: nginx-podsessionAffinity: Nonetype: NodePort     #ClusterPort

三:标签labels: key=value

​ kubectl get pods -l app #显示拥有app标签的Pod

​ kubectl get pods -l run=client

​ kubectl label pods client release=canary #增加标签

​ kubectl label pods client release=stable --overwrite #强行修改标签

四:标签选择器

​ 等值关系:

​ kubectl get pods --show-labels -l release=canary

​ kubectl get pods --show-labels -l release=stable,run

​ 集合关系:in

​ KEY in (VALUE1,VALUE2,VALUE3)

​ kubectl get pods --show-labels -l “release in (canary,beta)”

​ KEY notin (VALUE1,VALUE2,VALUE3)

​ kubectl get pods --show-labels -l “release notin (canary,beta)”

​ 选择器

​ matchLabels: 直接给定键值

​ matchExpressions: 基于给定的表达式来定义标签选择器{key:“KEY”,“OPERATOR”,values:[VAL1,VALU2,…]}

​ OPERATOR: In, NotIn, values字段值必须为非空列表

​ Exists, NotExists values字段必须为空列表

​ nodeSelector <map[string]string>

​ annotations: 资源注解。区别与lables在于 不能挑选资源对象。仅用于为对象提供元数据。

五: pod的生命周期 liveness probe /rediness probe差别。

​ post start --------> run -------->pre stop

​ main container----------------------------------------

​ post start ---->liveness probe /rediness probe------>pre stop

​ livense probe # 存活状态检测

​ rediness probe # 就绪状态检测 判定进程否提供服务 目标不同。 1/1 0/1

​ 1. ExecAction 自定义命令

​ 2. TCPSocketAction 端口命令 tcp端口发命令

​ 3. HTTPGet http 服务请求 应用层get请求。

pod状态:pending 挂起 。条件不满足。调度未完成。

​ running 运行状态

							 Failed,........suceesed   Unknow

​ 创建pod: etcd -----

​ 容器重启策略:

​ Aways :pod中的容器挂了直接重启

​ OnFailure : 重启策略

​ Never: 从不重启

​ Default: Aways

​ pod结束时 会向Pod所有的容器发送stop信号。宽限期。30s。过后重新发送强行这终止信号。

​ exec-demo.yml

apiVersion: v1
kind: Pod 
metadata:name: liveness-exec-pod
spec:containers:- name: liveness-exec-containerimage: busybox:latestcommand:- "/bin/sh"- "-c"- "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy;sleep 3600"livenessProbe:              #exec:command:- "test"- "-e"- "/tmp/healthy"initialDelaySeconds: 2           #  第一次探测延时时间 2秒 。periodSeconds: 5						# 第二次探测间隔的时间 5秒

livenss-httpget.yaml

apiVersion: v1
kind: Pod 
metadata:name: liveness-httpget-pod
spec:containers:- name: liveness-httpget-containerimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80livenessProbe:httpGet:port: http path: /index.htmlinitialDelaySeconds: 2           #  第一次探测延时时间 2秒 。periodSeconds: 5            # 第二次探测间隔的时间 5秒

六:lifecycle 启动后钩子 终止前钩子

​ postStart #启动后执行

​ preStop #结束前执行

​ exec

​ httpGet

​ tcpSocket

poststart-demo.yml

apiVersion: v1
kind: Pod
metadata:name: poststart-pod
spec:containers:- name: busybox-httpdimage: busybox:latestimagePullPolicy: IfNotPresentlifecycle:postStart:          #exec:command:- "/bin/sh"- "-c"- "mkdir -p /data/web/; echo 'homepate' >> /data/web/html.index"  # 首先执行command:         #  不能强依赖postStart的结果。  两条命令不能相互依赖结果 无法确定哪个先执行- "/bin/sh"- "-c" - "sleep 3600"

八:pod控制器。

1.ReplicaSet () ReplicationController

  1. Deployment: 工作与ReplicaSet之上的。 扩缩容。

  2. DaemonSet : 确定每个节点运行一个。 后台守护进程。系统级应用。 支持滚动更新。

  3. Job : 任务是否完成。只能执行一次性作业。

  4. Cronjob:

  5. StatefulSet : 有状态应用。

    1.rs.yml

    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:name: myapp
    spec:replicas: 2selector:matchLabels:          #  匹配Pod标签app: myapprelease: canarytemplate:metadata:name: myapp-pod    #  pod名称。无用。可不定义。labels:           #   pod标签app: myapp      release: canaryenvironment: qaspec:containers:- name: myapp-containerimage: ikubernetes/myapp:v1ports:- name: httpcontainerPort: 80strategy:          #更新策略   金丝雀发布 。rollingUpdate:maxSurge: 1           #  最大只能多1个。maxUnavailable: 0     #  可以有几个不可用。0个 
    

    service与pod控制器无关。lables取决于pod标签。

    Deployment更新策略;

    ​ canary版本 金丝雀

    kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v2 && kubectl rollout pause deployment myapp-deploy #更新1个后暂停更新

    kubectl rollout status deployment myapp-deploy #查看滚动了几个

    kubectl rollout resume deployment myapp-deploy #继续上一次的滚动更新。

    kubectl rollout history deployment myapp-deploy

kubectl rollout undo deployment myapp-deploy --to-revision=5


deploy-myapp.yml

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deploy
spec:strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0replicas: 5selector:matchLabels:app: myapprelease: canarytemplate:metadata:labels:app: myapprelease: canaryspec:containers:- name: myappimage: ikubernetes/myapp:v2ports:- name: httpcontainerPort: 80

redis-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:name: redisnamespace: default
spec:replicas: 1selector: matchLabels:app: redisrole: logstortemplate:metadata:labels:app: redisrole: logstorspec:containers:- name: redisimage: redis:4.0-alpineports:- name: rediscontainerPort: 6379

filebeat-daemonset.yml

apiVersion: apps/v1
kind: DaemonSet
metadata:name: filebeat-dsnamespace: default
spec:selector: matchLabels:app: filebeatrelease: stabletemplate:metadata:labels:app: filebeatrelease: stablespec:containers:- name: filebeatimage: ikubernetes/filebeat:5.6.5-alpineenv:- name: REDIS_HOSTvalue: redis.default.svc.cluster.local- name: REDIS_LOG_LEVELvalue: info

kubectl explain pods.spec.hostNetwork #共享宿主机的网络空间。

九、Service

iptables -vnL -t nat

ClusterIP

NodePort

LoadBalancer 云环境

资源记录:SVC_NAME.NS_NAME.DOMAIN.LTD

​ redis.default.svc.cluster.local

redis-svc.yml

apiVersion: v1
kind: Service
metadata:name: redis
spec:clusterIP: 10.97.97.97type: ClusterIPports:- port: 6369targetPort: 6379selector:app: redisrole: logstor
  ports:- nodePort: 32000    #pod 端口  不定义为随机。  尽量不要指定port: 800          #集群内访问端口。svc内部端口  protocol: TCPtargetPort: 80     #容器端口  目标端口 必须指定selector:run: nginx-podsessionAffinity: Nonetype: NodePort     #ClusterPort

$$
ports:

  • nodePort: 32000 #pod 端口 不定义为随机。
    port: 800 #集群内访问端口。svc内部端口
    protocol: TCP
    targetPort: 80 #容器端口
    selector:
    run: nginx-pod
    sessionAffinity: None
    type: NodePort #ClusterPort
    $$

spec:sessionAffinity:ClientIP 连接追踪

无头服务:clusterIP: None . 不能是Nodeport

dig -t A redis.default.svc.cluster.local. @10.96.0.10

apiVersion: v1
kind: Service
metadata:name: app-myapp
spec:type: ClusterIPclusterIP: "None"    #无头服务ports:- port: 80targetPort: 80selector:app: myapprelease: canary 
http://www.lryc.cn/news/8607.html

相关文章:

  • SAP FICO 深入讲解会计凭证
  • LeetCode 2341. 数组能形成多少数对
  • PHPStorm常用快捷键
  • 【基于腾讯云的远程机械臂小车】
  • 兼职任务平台收集(一)分享给有需要的朋友们
  • MarkDown中公式的编辑
  • 解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全
  • 06 OpenCV 阈值处理、自适应处理与ostu方法
  • RFC7519规范-JWT - json web token
  • 移动机器人设计与实践课程大纲
  • Lesson 7.2 Mini Batch K-Means与DBSCAN密度聚类
  • 11.Dockerfile最佳实践
  • 【企业云端全栈开发实践-1】项目介绍及环境准备、Spring Boot快速上手
  • 5-HT2A靶向药物|适应症|市场销售-上市药品前景分析
  • HTTPS协议原理---详解
  • Pytest学习笔记
  • Fuzz概述
  • 区块链知识系列 - 系统学习EVM(四)-zkEVM
  • Leetcode.2341 数组能形成多少数对
  • C++复习笔记10
  • leaflet 纯CSS的marker标记,不用图片来表示(072)
  • Elasticsearch:使用 intervals query - 根据匹配项的顺序和接近度返回文档
  • 无法决定博客主题的人必看!如何选择类型和推荐的 5 种选择
  • 数字化转型的成功模版,珠宝龙头曼卡龙做对了什么?
  • 转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换
  • 中国地图航线图(echarjs)
  • Python正则表达式中group与groups的用法详解
  • c++练习题7
  • MySQL学习
  • C语言(强制类型转换)