k8s-yml檔案詳解
阿新 • • 發佈:2020-07-17
Nginx 業務 yaml 檔案詳解:
cat /opt/linux-yml/nginx.yml kind: Deployment #物件型別,是deployment控制器,kubectl explain Deployment apiVersion: extensions/v1beta1 #指定這個物件屬於哪個api分組,它的API版本是多少, # kubectl explain Deployment.apiVersion metadata: #pod的元資料資訊,kubectl explain Deployment.metadata labels: #自定義pod的標籤,kubectl explain Deployment.metadata.labels app: linux-nginx-deployment-label #標籤名稱為app值為linux-nginx-deployment-label, 後面會用到此標籤 name: linux-nginx-deployment #pod的名稱 namespace: linux-ns #把pod的建立到指定的namespace,預設是default spec: #定義deployment中容器的詳細資訊,kubectl explain Deployment.spec replicas: 1 #創建出的pod的副本數,即多少個pod,預設值為1 selector: #定義標籤選擇器 matchLabels: #定義匹配的標籤,必須要設定 app: linux-nginx-selector #匹配的目標標籤 template: #定義模板,必須定義,模板是起到描述要建立的pod的作用 metadata: #定義模板元資料 labels: #定義模板label,Deployment.spec.template.metadata.labels app: linux-nginx-selector #定義標籤,必須等於 matchLabels 定義的標籤 spec: #定義pod資訊 containers: #定義pod中容器列表,可以多個至少一個,pod不能動態增減容器(想新新增容器,需要把原有pod刪除,重新建立pod) - name: linux-nginx-container #容器名稱 image: harbor.linux.com/web-images/nginx:1.14.2 #映象地址 #command: ["/apps/tomcat/bin/run_tomcat.sh"] #容器啟動執行的命令或指令碼 #imagePullPolicy: IfNotPresent #本地有指定的映象,就不去harbor中拉取 imagePullPolicy: Always #拉取映象策略;不管本地有沒有所指定的映象,都去harbor拉取 ports: #定義容器埠列表 - containerPort: 80 #定義一個埠 protocol: TCP #埠協議,TCP或者UDP name: http #埠名稱 - containerPort: 443 #定義一個埠 protocol: TCP #埠協議 name: https #埠名稱 env: #給容器傳遞配置的環境變數 - name: "password" #變數名稱。必須要用引號引起來 value: "123456" #當前變數的值 - name: "age" #另一個變數名稱 value: "18" #另一個變數的值 resources: #對容器資源的請求設定和限制設定 limits: #硬限制;限制容器使用宿主機資源上限 cpu: 2 #cpu的限制,單位為core數,可以寫0.5或者500m(毫核)等CPU壓縮值,1000毫核 memory: 2Gi #記憶體限制,單位可以為Mib/Gib,將用於docker run --memory引數 requests: #資源請求的設定;當構建pod時,過濾出哪些node節點的剩餘資源符合下面所指定的值,則建立pod時,才有可能把pod往該node節點排程;如果不夠下面所指定的值,則建立pod時不會把pod往不符合要求的node上排程 cpu: 1 #cpu請求數,容器啟動的初始可用數量,可以寫0.5或者500m等CPU壓縮值 memory: 512Mi #記憶體請求大小,容器啟動的初始可用數量,用於排程pod時候使用 --- kind: Service #物件型別為service;pod要想被外部訪問,就必須指定一個service,service會在宿主機開啟一個nodeport;service不指定nodeport,則該service僅限於k8s內部呼叫 apiVersion: v1 #service API版本,service.apiVersion metadata: #定義service元資料,service.metadata labels: #自定義service的標籤,service.metadata.labels app: linux-nginx #定義service標籤的內容 name: linux-nginx-spec #定義service的名稱,此名稱會被DNS解析 namespace: linux-ns #該service隸屬於的namespaces名稱,即把service建立到哪個namespace裡面,並且service必須與pod在同一個namespace中,否則在呼叫時,service找不到所呼叫的pod spec: #定義service的詳細資訊,service.spec type: NodePort #NodePort表示在宿主機開啟一個監聽埠;service的型別,定義服務的訪問方式,預設為ClusterIP(不會再宿主機開啟一個監聽埠,只為k8s內部提供服務),service.spec.type ports: #定義訪問埠, service.spec.ports - name: http #定義一個埠名稱 port: 80 #service的埠 protocol: TCP #協議型別;service是k8s內部的一個傳輸層的負載均衡 targetPort: 80 #目標pod的埠 nodePort: 30001 #node節點暴露的埠 - name: https #SSL 埠 port: 443 #service 443埠 protocol: TCP #埠協議 targetPort: 443 #目標pod埠 nodePort: 30043 #node節點暴露的SSL埠 selector: #service的標籤選擇器,定義把使用者請求轉發給指定label標籤的pod;service會把符合label標籤的pod新增到後端可被排程的endpoint列表中 app: linux-nginx-selector #將流量轉發到指定的pod上,須等於Deployment.spec.selector.matchLabels
注意事項
提前建立好yml檔案,並建立好pod執行所需要的namespace的yml檔案等資源,一般建立namespace的操作,會單獨存放在一個yml檔案中
cat /opt/linux-yml/linux-ns.yml
apiVersion: v1 #API版本
kind: Namespace #型別為namespac
metadata: #定義元資料
name: linux-ns #namespace名稱