K8S 深入 Pod-Pod 相关的点点滴滴

设计思想

  • Pod是最小调度单位
  • 本质还是容器的隔离 (共享同一个namespace,共享同一个Volume)
    docker run --net=xxx --volumes-from=xxx...
     对容器的启动顺序是有要求的
  • pause容器

一个很重要的容器命令:lifecycle
file

kubectl create -f pod-volume.yaml
kubectl delete -f pod-volume.yaml

file

Pod生命周期

Pod的几种状态

  • Pendding
  • containerCreating
  • Running
  • Succeeded
  • Failed
  • Ready
  • CrashLoopBackOff
  • Unknown

ProjectedVolume

  • Secret
    
    [hemei@master ~]$ kubectl get secret
    NAME                                                    TYPE                                  DATA   AGE
    default-token-9dmxv                                     kubernetes.io/service-account-token   3      266d
    hub-secret                                              kubernetes.io/dockerconfigjson        1      185d
    nfs-subdir-external-provisioner-token-w25n5             kubernetes.io/service-account-token   3      176d
    sh.helm.release.v1.nfs-subdir-external-provisioner.v1   helm.sh/release.v1                    1      176d

查看secret:
```yaml
[hemei@master ~]$ kubectl get secret default-token-9dmxv -o yaml
apiVersion: v1
data:
  ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1Ea3dNekExTXpneU5Wb1hEVE14TURrd01UQTFNemd5TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTTM3CmRVRE1ob1Vvc1BiL0t3NDBVUGNpNXozMElndnhvVjE4aGJONlRrUFdxYmJoUjdjMVRxZ2hMTy9PWEttMzFsaEIKZllzNWh6VTJrS3B3VXh0Wk1DZksyNWVXeXFIaEkvcmdpOS9PeDdrcElLcTRXUFdvZmJXelU1dUc1anIzY09xawo3dlNwaSs5S2h4TU5XeEN0Tldmb2NOSnVaU1ZMTHhuRUY4Ky9DRjh1Z2Q4ZlI4c0lBUzdGV2drdGhWa2NtVzFBCjZIcU5mR3ExS3ZJZmpVYlg3WEY1RDVnaVVuQ1Zqb2g2b1RnV0lxT1BjSjI3TjBSOEpNOGNmZWNsZ2NUM0hvT0QKb1NPaG9CMFBaMzZldlFKb2VZZlZmeUZUcE1PMHQrUGNHRkl3bzNDQ2lVQ0xvSEdmRStoMWl6dlgrU2JlK1grTApDZENuRFB0eDErVDhWMGF4VVo4Q0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZHeTJnSzBVd2Y1U0ZYSXdKbEdsN2JoMVI1T0hNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFDMm56bnEvcWNzYmUyczJnMThaTDdBb3dEUjVtM21IQ09oejJIYW5ZM2V6OU01RGZlOApGVHU0RG93d25lQWcrNFhNWStqZDhHYXhiNVh1MXBlTEhBUmx4OVE2U0plTnZMTEVnbkZRWk5iTUZLaW9Wa1F6CnNWelJNODVKcFF3TlN1Y1F4OWcya1QwTGYzS01Qa3Y4elc0NVdoRlJTK2FTSzhsb1pqb1U1R1BaR3dVdUtWV1MKdlh5TnA2d0hEUkJ6dzhRS2FIdzdLdWlZQjN2VVFjQnpWZEpYVThOcWQ1SGNzQXpSUW9RYTl4SktsV0VPSThMZQpuS3hpU3VJSm5WcXdPMTQvdk90Z0xxcFh2QnFSNFlLYmdWSHMrbG1rOG9Ea1BxUFRFS1hUQk5obUtqUFFyK1Q1CnovMkV2SFF0aWlhV2R5VkV2SzQrZXB2dzl0MVRHc3czUXZhVgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
  namespace: ZGVmYXVsdA==
  token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkluTkxOazlXV1doSFUzVXlZVWhwYlV4cldrUmhYMk5UWVcxNk9YbFJZMVpvUm1seVZsZG9iWFZoWjNjaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUprWldaaGRXeDBJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpXTnlaWFF1Ym1GdFpTSTZJbVJsWm1GMWJIUXRkRzlyWlc0dE9XUnRlSFlpTENKcmRXSmxjbTVsZEdWekxtbHZMM05sY25acFkyVmhZMk52ZFc1MEwzTmxjblpwWTJVdFlXTmpiM1Z1ZEM1dVlXMWxJam9pWkdWbVlYVnNkQ0lzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG5WcFpDSTZJbVpsTm1ZeFlqY3pMVEV5TWpndE5HRTNaQzA1TVRjekxUZzBNMlUyWWpFNU5HTXdNaUlzSW5OMVlpSTZJbk41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwa1pXWmhkV3gwT21SbFptRjFiSFFpZlEuZ2dqQ3ZpMUJZN0dWYUJhWmlxYjJVNF9JejJ4ZkdON25aWmNJSTlVSzZJTlhtZ2VlblB4NGZJNGxVeFF1cDNGeEdhZ0pYN1I5ejhhWklpakZnZFNJZmRPeE96czNsRFBaZ3N2dVphM29JRXVFaV9lclJkZVB2Nkpvc2RYWkVjS1hMWHBjTzZKYjBNVGhqMS11VmZnSDRFNWdjZWZRT1czTEVLbGEtWlpmYnVpMVh4LUxEUWhzQTlvRkRzVVl6Z0FFM3BGbGUyVjVuNFNMaWRvVGI0WGNEUWhla3pBdEJWM3lYcXl1dEJJTXBiUktSUlMzWm11VmcwTXRkVWdMeVpBenh4VndaaVBhLWFvYlZ1UTM0M1dRcnZDMHlHanZsNVh0djJjZVBjTmdQMlFuYlUzcGFaUUlIUllhLWhsMzltN0wyNnlsWW04bWhoeDVYZGNvbDdCZ21B
kind: Secret
metadata:
  annotations:
    kubernetes.io/service-account.name: default
    kubernetes.io/service-account.uid: fe6f1b73-1228-4a7d-9173-843e6b194c02
  creationTimestamp: "2021-09-03T05:40:21Z"
  name: default-token-9dmxv
  namespace: default
  resourceVersion: "380"
  uid: abe66806-f73b-4dad-bf60-8781210787d9
type: kubernetes.io/service-account-token
[hemei@master ~]$ 

file

  • ConfigMap
    存储一些非加密的文件的键值对
    game.properties 文件
[hemei@master test]$ cat game.properties 
enemies=aliens
lives=3
enemies.cheat=true
secret.code.passphrase=UUDDLLLLSIODSD
secret.code.allowed=true
secret.code.lives=30
[hemei@master test]$ 

将属性文件保存在 configMap

[hemei@master test]$ kubectl create configmap web-game --from-file game.properties
configmap/web-game created

configMap 可以简写为 cm
查看配置文件:

[hemei@master test]$ kubectl get cm web-game -o yaml
apiVersion: v1
data:
  game.properties: |
    enemies=aliens
    lives=3
    enemies.cheat=true
    secret.code.passphrase=UUDDLLLLSIODSD
    secret.code.allowed=true
    secret.code.lives=30
kind: ConfigMap
metadata:
  creationTimestamp: "2022-05-28T01:37:49Z"
  name: web-game
  namespace: default
  resourceVersion: "71024378"
  uid: e4ead394-c03e-49a7-ad96-2419517bacea
[hemei@master test]$ 

使用:

file

file

第二种创建方式:

[hemei@master test]$ vi configmap-test.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: configs
data:
  JAVA_OPTS: -Xms1024m
  LOG_LEVEL: DEBUG

创建:

[hemei@master test]$ kubectl create -f configmap-test.yaml
configmap/configs created
[hemei@master test]$ 

使用:
file

file

综上,可以通过configMap 来设置 容器内部的环境变量。

file

file

  • downwardapi

为者常成,行者常至