k8s那点事儿k8s入门Docker

kubernetes 自主式Pod

2019-01-21  本文已影响2人  baiyongjie

pod资源

Pod资源:
spec.containers <[]object>

- name <string>
  image <string>

port

# 仅仅是信息, 提示容器的暴露端口
  ports:
  - name: http
    protocol: TCP
    containerPort: 80
  - name: https
    protocol: TCP
    containerPort: 443

imagePullPolicy

  imagePullPolicy <string>
    Always(总是下载,从仓库下载,不管本地是否存在)
    Never(从不下载,如果有就用,没有也不去下载)
    IfNotPresent(存在就使用,不存在就去下载)
    如果镜像标签是latest,那么默认就是Always
    如果不是latest,那么默认值是IfNotPresent

command & args

https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/

Entrypoint:
Image中运行程序的命令

Cmd:
Image中运行程序的命令中的参数

command:
Pod中运行程序的命令

args:
Pod中运行程序的命令中的参数
描述 Docker file kubernetes
command Entrypoint command
arguments Cmd args
Images Entrypoint Image Cmd Container command Container args Command run
[/ep-1] [for bar] <not set> <not set> [ep-1 foo bar]
[/ep-1] [for bar] [/ep-2] <not set> [ep-2]
[/ep-1] [for bar] <not set> [zoo boo] [ep-1 zoo boo]
[/ep-1] [for bar] [/ep-2] [zoo boo] [ep-2 zoo boo]

labels

每个Pod可以有多个标签
每个标签也可以附加到多个Pod

标签:
  key=value
    key: 字母、数字、_、-、.
    value:可以为空,只能字母或数字开头及结尾,中间可使用
    
标签选择器:
  等值关系:=,==,!=
  集合关系:
    KEY in (VALUE1,VALUE2,...)
    KEY notin (VALUE1,VALUE2,...)
    KEY
    !KEY
    
  许多资源支持内嵌字段定义其使用的标签选择器:
    matchLabels:直接给定键值
    matchExpressions:基于给定的表达式来定义使用标签选择器,{key:"KEY", operator:"OPERATOR",values:[VAL1,VAL2,...]}
      操作符:
        In, NotIn:values字段的值必须为非空列表;
        Exists, NotExists:values字段的值必须为空列表

  nodeSelector <map[string]string> (容器的属性)
      节点标签选择器,
    spec:
      container:
        name: ...
        image: ...
        ....
      nodeSelector:
        disktype: ssd
        
  nodeName <string>
  
  annotations:
      与label不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供“元数据”。

labels常用命令

# 查看所有标签
[root@kubeadm-mater01 test]# kubectl get pods --show-labels
NAME                    READY   STATUS    RESTARTS   AGE    LABELS
curl-66959f6557-2tm4b   1/1     Running   2          7d2h   pod-template-hash=66959f6557,run=curl
pod-demo               2/2     Running   1          79m    app=myapp,tier=frontend

# 查看只有app标签的pod(标签过滤)
[root@kubeadm-mater01 test]# kubectl get pods -l app
NAME        READY   STATUS    RESTARTS   AGE
pod-demo   2/2     Running   1          82m

[root@kubeadm-mater01 test]# kubectl get pods -l app --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
pod-demo   2/2     Running   1          82m   app=myapp,tier=frontend

# 显示多个标签的标签值
[root@kubeadm-mater01 test]# kubectl get pods -L app,run
NAME                    READY   STATUS    RESTARTS   AGE    APP     RUN
curl-66959f6557-2tm4b   1/1     Running   2          7d2h           curl
pod-demo               2/2     Running   1          83m    myapp   

# 给资源对象打标签
[root@kubeadm-mater01 test]# kubectl label pods pod-demo release=canary
pod/pod-demo labeled

[root@kubeadm-mater01 test]# kubectl get pods pod-demo --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
pod-demo   2/2     Running   1          86m   app=myapp,release=canary,tier=frontend

# 修改标签
[root@kubeadm-mater01 test]# kubectl label pods pod-demo release=stable --overwrite
pod/pod-demo labeled

[root@kubeadm-mater01 test]# kubectl get pods -l app --show-labels  
NAME       READY   STATUS    RESTARTS   AGE   LABELS
pod-demo   2/2     Running   0          43s   app=myapp,release=stable,tier=frontend

#集合选择
## KEY in ()
[root@kubeadm-mater01 test]# kubectl get pods -l 'release in (canary,stable)'
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   2/2     Running   0          20m

## KEY notin ()
[root@kubeadm-mater01 test]# kubectl get pods -l 'release notin (canary,stable)'
NAME                    READY   STATUS    RESTARTS   AGE
curl-66959f6557-2tm4b   1/1     Running   2          7d3h

# 查看node节点标签
[root@kubeadm-mater01 test]# kubectl get nodes --show-labels 
NAME              STATUS   ROLES    AGE    VERSION   LABELS
kubeadm-mater01   Ready    master   7d3h   v1.13.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=kubeadm-mater01,node-role.kubernetes.io/master=
kubeadm-node01    Ready    <none>   7d2h   v1.13.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=kubeadm-node01

# 给node节点打标签
[root@kubeadm-mater01 test]# kubectl label nodes kubeadm-node01 disktype=ssd
node/kubeadm-node01 labeled

[root@kubeadm-mater01 test]# kubectl get nodes --show-labels                             
NAME              STATUS   ROLES    AGE    VERSION   LABELS
kubeadm-mater01   Ready    master   7d3h   v1.13.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=kubeadm-mater01,node-role.kubernetes.io/master=
kubeadm-node01    Ready    <none>   7d2h   v1.13.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/hostname=kubeadm-node01

Pod生命周期

livenessProbe实例

apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec-pod
  namespace: default
spec:
  containers:
  - name: liveness-exec-container
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 3600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/healthy"]
      initialDelaySeconds: 1
      periodSeconds: 3

readinessProbe实例

apiVersion: v1
kind: Pod
metadata:
  name: readiness-httpget-pod
  namespace: default
spec:
  containers:
  - name: readiness-httpget-container
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    readinessProbe:
      httpGet:
        port: http
        path: /index.html
      initialDelaySeconds: 1
      periodSeconds: 3
上一篇下一篇

猜你喜欢

热点阅读