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名稱