Kubernetes實現資源限制,調度約束,服務發現以及健康檢查

①Kubernetes實現資源限制,對每個Pod設置資源限制

[root@node-1 k8s-yaml] cat nginx-resource.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx

spec:
  containers:
  - name: nginx
     image: nginx
     resources:
       requests:
         memory: "64Mi"
         cpu: "250m"
       limits:
         memory: "128Mi"
         cpu: "500m"

②Kubernetes調度約束,將Pod調度到某一固定的後端node節點上

[root@node-1 k8s-yaml]# cat nginx-node-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deploymeng-node
spec:
  replicas: 3
  template:
    metadata:
      name: nginx-pod
      labels:
        app: nginx
    spec:
      nodeName: 192.168.175.131   ##將3個pod部署在192.168.175.130節點上
      containers:
      - name: test
        image: nginx:1.10
        ports:
        - containerPort: 80

創建,並查看deploment部署情況,成功部署

圖片.png

查看pod節點分佈

圖片.png

③Kubernetes服務發現,使得Deployment以及單個Pod節點在創建的時候能夠自動發現Service

注意:想要讓Pod,Deplyment在創建的時候自動加入到Service中,必須要先啓動Service,然後再創建Pod,Deployment

創建Service:

[root@node-1 k8s-yaml]# cat nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx


ports上下文:

  port: 80表示服務對外開啓的接口可以通過80端口進行訪問。這個對外僅限於node節點。

  targetPort: 80表示通過port的端口可以去訪問到pod的80端口。

selector上下文:

  app: nginx表示標籤,當Pod節點,Deployment的標籤爲Service相同標籤的話,就可以加入到Service中。

圖片.png

啓動deployment,參考②進行創建,label要一致,啓動之後進入pod中查看容器變量,如圖,成功加入到Service中

圖片.png

④Kubernetes健康檢查,在Pod啓動後進行檢測

livenessProbe
如果檢查失敗,將殺死容器,根據Pod的restartPolicy來操作。
  readinessProbe
如果檢查失敗,Kubernetes會把Pod從service endpoints中剔除。
Probe支持以下三種檢查方法:
httpGet
  發送HTTP請求,返回200-400範圍狀態碼爲成功。
exec
  執行Shell命令返回狀態碼是0爲成功。
tcpSocket
  發起TCP Socket建立成功。


注意:默認的Pod的重啓規則restartPolicy爲Always


httpGet,訪問固定頁面,若能夠訪問則判斷改Pod爲健康,否則重啓,對Pod節點中的index.html文件進行健康監測。

啓動該yaml文件,注意,Service服務一直開啓着,要不無法訪問該Pod。

[root@node-1 k8s-yaml]# cat nginx-health.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-health
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-health
    image: nginx:1.10
  #  volumeMounts:
  #  - name: nginx-mount
  #    mountPath: /tmp/k8s-yaml
    livenessProbe:
      #tcpSocket:
      httpGet:
        path: /index.html
        port: 80
      initialDelaySeconds: 10
      periodSeconds: 5
      timeoutSeconds: 3
    ports:
    - containerPort: 80
  #volumes:
  #- name: nginx-mount
  #  hostPath:
  #    path: /tmp/k8s-yaml


initialDelaySeconds: 10 表示在Pod啓動10秒後進行檢測。
periodSeconds: 5 表示進行健康監測的頻率爲5秒1次。
timeoutSeconds: 3 表示健康監測失敗後的超時時長。

可以試着將index.html刪除,或換一個文件路徑,這樣使用kubectl describe pod nginx-health就會顯示unhealthy


tcpSocket,通過檢測80,或其他端口是否正常來判斷Pod的健康狀態。

[root@node-1 k8s-yaml]# cat nginx-health.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-health
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-health
    image: nginx:1.10
  #  volumeMounts:
  #  - name: nginx-mount
  #    mountPath: /tmp/k8s-yaml
    livenessProbe:
      tcpSocket:
      #httpGet:
        #path: /index.html
        port: 80
      initialDelaySeconds: 10
      periodSeconds: 5
      timeoutSeconds: 3
    ports:
    - containerPort: 80
  #volumes:
  #- name: nginx-mount
  #  hostPath:
  #    path: /tmp/k8s-yaml


exec,通過命令行的形式進行健康狀態檢測。

[root@node-1 k8s-yaml]# cat nginx-health-exec.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: nginx:1.10
    livenessProbe:
      exec:
        command:
        - cat
        - /usr/share/nginx/html/index.html
      initialDelaySeconds: 10
      periodSeconds: 5
      timeoutSeconds: 3




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章