【k8s】3-kubectl 命令以及 yaml文件學習


Kubectl apiserver 管理對象命令

  Pod service replicaset deployment statefulet daemonset job cronjob node

Kubectl get cs 查看信息等 

 

命令啟動pod

Kubectl run -> create a deployment or job manage the created container

Kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80   普通pod

Kubectl run pi --schedule=”0/5 * * * ?” --image=perl  job控制器   

 

# 查看信息

kubectl get svc

kubectl get pods

kubectl get deployments

kubectl describe pods nginx-deploy   # 列出所有pod詳情

kubectl describe deployment nginx-deploy  # 列出deployment控制器詳情

 

# 暴露端口 創建svc

expose deployment nginx-deploy --name=nginx-deploy --port=80 --protocol=TCP --target-port=80

 

# 修改副本集 數量為5

kubectl scale --replicas=5 deployment nginx-deploy 

 

# 滾動更新

kubectl set image deployment nginx-deploy nginx=nginx:1.5

  

# 查看滾動更新情況

kubectl rollout status deployment nginx-deploy

 

# 修改對外訪問

# 手動在外部做負載均衡器到內部端口

kubectl edit svc nginx-deploy 

Type: ClusterIP ---> Nodeport

kubectl get svc

Curl nodeip:隨機端口 

 

 

yaml文件的學習

配置清單

 

# 查看pod配置清單 以yaml文件輸出

kubectl get pods nginx-deploy-5bf87f5f59-bgzl7 -o yaml

 

# 大部分資源配置清單

Apiversiongroup/versi on   # Kubectl api-versions 所屬群組

kind: 資源類別

metadata:元數據

  Name:名稱唯一

  Namespace:名稱空間

  Labels:標簽

  Annotations

  SelfLink: /api/GROUP/VERSION/namespaces/NAMESPACE_NAME/TYPE/NAME

spec: 期望狀態 disired state

status: 讓當前狀態 current state 本字段由kubernetes集群維護

 

kubectl explain pods 內嵌說明

Kubectl explain pods.spec 

Yaml文件
# 創建
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:    
  containers:
  - name: myapp
    image: nginx
  - name: busybox
    image: busybox:latest
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3500"

kubectl create -f pod-demo.yaml  # 創建pod 

kubectl exec -it pod-demo -c myapp -- /bin/sh    # 進入pod

Kubectl delete -f pod-demo.yaml  # 刪除pod

 

 Pod資源:

 

spec.containers <[]object>
- name <string> Image <string> imagePullPolicy <string> # Always拉取最新的,Never 本地沒有不拉取,if本地沒有再拉取 Always, Never 鏡像中默認的應用: command,args
標簽:
   key=value
   Key: 字母 數字 _ 開頭、 Value: 可為空 字母數字 

       標記標簽

Kubectl label pods pod-demo release=canary

修改標簽

Kubectl label pods pod-demo release=stable --overwrite

選擇標簽

Kubectl get pods -l release

標簽選擇器

等值關系 Kubectl get pods -l release=stable,app=myapp

集合關系 -l “release notin (canary,beta,alpha)”

許多資源支持內嵌字段

matchLabels: 直接給定鍵值

matchExpressions: 基於給定的表達式來使用選擇器

In,Notin:values

                 Exists,NotExists:values指必須為空列表

nodeSelector <map[string]string>

節點標簽選擇器

kebectl label nodes node_name disktype=ssd

Cat >>nginx-deploy.yaml<< EOF

nodeSelector:

Disktype: ssd

EOF

Annotations:

label不同的地方在於不能用於挑選資源對象 僅用於為對象提供元數據

 

Pod生命周期

狀態:pending 已經創建 但是沒有適合配置的節點

    Running 運行狀態

                  Failed 失敗......

創建Pod

Pod生命周期中重要行為:

初始化容器

容器探測

Liveness

Readiness

         RestartPolicy:

         Always, OnFailure, Never 

    探針類型三種

         ExecActionTcpsocketActionHttpGetAction

 

# kubectl explain pod.spec.containers.livenessProbe

HTTPGET 
apiVersion: v1
kind: Pod
metadata:
  name: liveness-httpget-pod
  namespace: default
spec:
  containers:
  - name: liveness-httpget-container
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    livenessProbe:
      httpGet:
        port: 80
        path: /index.html
      initialDelaySeconds: 1
      periodSeconds: 3
文件檢查 
EXEC
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; slepp 30; rm -rf /tmp/healthy; sleep 3600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/healthy"]
  #restartPolicy:
      initialDelaySeconds: 1
      periodSeconds: 3

#  pods yaml回顧

 apiVersion, kind, metadata, spec statu(只讀)

Spec:

containers

nodeSelector

nodeName

restartPolicy:

Always,Never,OnFailure

containers:

name

image

imagePullPolicy

Ports:

name

containerPort

livenessProbe

readinessProbe

liftcycle

ExecAction: exec

TCPSocketAction: tcpSocket

HTTPGetAction: httpGet

 

Pod控制器

ReplicaSet: 控制副本數量 支持滾動更新

Deployment: 工作在ReplicaSet 滾動更新回滾 聲明

Daemon: 每個節點只運行一個POD副本 系統級守護進程

Job:一次性任務

Cronjob: 周期性JOB

StatefulSet:  有狀態服務

 

kubectl edit rs myapp

Kubectl explain deploy

# 打補丁 更新

kubectl apply -f deploy-demo.yaml

Kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3

Kubectl path deployment myapp-deploy -p ‘{“spec”:{“strategy”:”{“rollingUpdate”:{“maxsurge”:1,”maxUnavailable”:0}}}}’

 

# 回滾

kubectl get deployment -o wide

kubectl rollout history deployment

rollout undo deployment myapp-deploy --to-revision=1

 

 

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM