K8S-Pod

什麼是Pod

  • Pod是K8S最小調度單位。
  • Pod能夠由一個或者多個容器組合而成。
  • Pod容器共享Volume
  • 不多會直接建立一個Pod,在大多數狀況下,會經過RC,RS,Deployment,DaemonSet,Job等控制器完成對一組Pod副本的建立,調度以及生命週期的自動控制任務。

經過Deployment部署一個nginx

  • 新建而且編輯nignx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
  • 建立Deployment
kubectl create -f nignx-deployment.yaml
# 執行一下命令能夠查看結果
kubectl get deployments
kubectl get rs
kubectl get pod -o wide
# [root@k8s-master k8s-yaml]# kubectl get pods
# NAME                               READY   STATUS    RESTARTS   AGE
# nginx-deployment-59c9f8dff-kbdg6   1/1     Running   0          47s
# nginx-deployment-59c9f8dff-lwnj2   1/1     Running   0          47s
# nginx-deployment-59c9f8dff-whjt8   1/1     Running   0          47s

建立Service

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - port: 8888
    targetPort: 80
  selector:
    app:nginx
  • NodePort類型:在node上打開一個端口,將該端口得流量導入到kube-proxy,而後kube-proxy進一步到對應得pod
apiVersion: v1
kind: Service
metadata: 
  name: nodeportservice
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 8889
    targetPort: 80

ConfigMap

  • 生產爲容器內的環境變量
  • 設置容器啓動命令的啓動參數
  • 以Volume的形式掛載爲容器內部的文件或者目錄

建立

  • 經過YAML配置文件方式建立
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-var
data: 
  level: info
  env: development
[root@k8s-master k8s-yaml]# kubectl create -f configmap.yaml 
configmap/cm-var created
[root@k8s-master k8s-yaml]# kubectl get cm
NAME     DATA   AGE
cm-var   2      20s
kubectl describe configmap

Pod中使用ConfigMap

# pod-configmap.yaml
apiVersion: v1
kind: Pod
metadata:
  name: cm-test-pod
spec:
  containers:
  - name: cn-test
    image: busybox
    command: ["/bin/sh", "-c", "env | grep | APP"]
    env:                            
    - name: APPLOGLEVEL      # 定義環境變量的名稱
      valueFrom:
        configMapKeyRef:
          name: cm-var       # 環境變量的值取自以上configmap.yaml定義的cm-var
          key: level         # key值爲level
    - name: APPENV
      valueFrom:
        configMapKeyRef:
          name: cm-var
          key: env
  • k8s在1.6的版本開始,引入了一個新的字段envFrom
# pod-envFrom-configmap.yaml
apiVersion: v1
kind: Pod
metadata:
  name: cm-test-pod
spec:
  containers:
  - name: cn-test
    image: busybox
    command: ["/bin/sh", "-c", "env"]
    envFrom:
    - configMapRef:
      name: cm-var

限制條件

  • ConfigMap必須在Pod以前建立
  • Config受NameSpace的限制,必須同一個NameSpace下
  • 支持被Api Server管理的Pod才能使用【好比靜態pod沒法使用】

容器內獲取Pod的信息

# pod-dapi.yaml
apiVersion: v1
kind: Pod
metadata:
  name: cm-test-pod
spec:
  containers:
  - name: cn-test
    image: busybox
    command: ["/bin/sh", "-c", "env"]
    env:                            
    - name: podName      # 定義環境變量的名稱
      valueFrom:
        fieldRef:
          podName: metadata.name
    - name: podId
      valueFrom:
        fieldRef:
          podId: status.podIP

Pod升級和回滾

  • Deployment的升級

Nignx由1.7.9升級到1.9.1html

# deployment-nginx.yaml
apiVersion: v1
kind: Deplopment
metadata:
  name: deployment-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containersPort: 80

# 建立
# kubeclt create -f deployment-nginx.yaml
# 升級
# kebectl set image deplopment/deplopment-nginx nginx=nginx:1.9.1
  • Deplopment的回滾
# 查看回滾命令
kubect rollout history deplopment/deployment-nginx
# 回滾到上一版本
kubectl rollout undo deployment/deployment-nginx

Pod的擴容

  • 手動擴容

經過執行kubectl scale命令或者經過restful api對一個deployment/rc/rs進行pod的副本數量的設置。node

  • 以上面deployment-nginx.yaml爲例[yaml中設置啓動3個]
kubectl scale deplopment deployment-nginx --replicase = 5
# 若是設置的replicase 小於初始化的,會「殺掉」一些運行中的Pod.
  • 自動擴容

須要用戶根據某個性能指標或者自定義業務指標,而且指定pod的副本數量範圍,系統將在這個範圍內根據性能指標的變化進行調整。nginx

  • HPA的資源對象處於api的「autoscaling」中,目前有v1和v2兩個版本,v1只支持基於CPU使用率的自動擴縮容。v2版本則支持基於任意指標的擴容配置,包括基於資源使用率,pod指標api

  • v1版本須要預先安裝Heapster組件或者Metrics Server 用於採集pod的CPU使用率bash

apiVserion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: v1-auto-nginx
spec:
  scaleTargetRef: # 目標做用對象,能夠是deplopment,rs,rc
    apiVsersion: apps/v1
    kind: Deplopment
    name: deplopment-nginx
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50 # 指望每一個pod的cpu使用率都是50%
  • v2版本
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: v2-auto-nginx
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: deployment
    name: deplopment-nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target: 
        type: Utilization
        averageUtilization: 50

K8s-安裝
K8s-Pod
K8s-應用部署
K8s-Helmrestful

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息