目錄
一、聲明式管理方法:YAML文件
1、yaml文件簡介
2、yaml和json的主要區別:
3、YAML的語法格式
4、yaml文件組成部分
①控制器定義
5、查看api資源版本標簽
6、編寫nginx-deployment.yaml資源配置清單
6.1創建資源對象
6.2查看創建的pod資源
7、創建service服務并對外提供訪問并測試
二、K8s中的port概述
①port
②nodeport
③targetport
④containerport
1、創建yaml文件模板
2、查看生產yaml格式
3、查看生成的json格式
4、通過yaml格式導出生成模板,并進行修改以及刪除一些不必要的參數
5、查看字段幫助信息
6、怎樣可以更輕松的寫yaml
6.1用run命令生成
6.2用get命令導出
6.3yaml文件的學習方法
三、具體案例
1、案例需求:
一、聲明式管理方法:YAML文件
①適合對資源的修改操作
②聲明式資源管理方法依賴于資源配置清單文件對資源進行管理
③資源配置清單文件有兩種格式:yaml(人性化,已讀),json(易于api接口解析)
④對資源的管理,是通過事先定義在統一資源配置清單內,再通過陳述式命令應用到k8s集群中
⑤語法格式:kubectl create/apply/delete -f xxx.yaml
1、yaml文件簡介
YAML仍然是一種標記語言,主要強調這種語言是以數據為中心,而不是以標記為中心,而像XML語言就使用了大量的標記。
YAML可讀性高,易于理解,用來表達數據序列化的格式。它的語法和其他高級語言類型,還可以簡單表達屬組,散列表,標量等數據形態。它使用空白符號縮進和大量依賴外觀的特色,特別適合用來表達或編輯數據結構,各種配置文件。
yaml配置文件的后綴為.yml
2、yaml和json的主要區別:
①yaml使用空格縮進,這是python開發人員熟悉的領域
②javascript開發人員喜歡JSON,因為它是javascript的一個子集,可以直接在Javascript中解釋和編寫,同時使用簡寫方式生命JSON,在使用沒有空格的典型變量名時,不需要鍵中的雙引號。
③有很多解釋器在YAML和JSON的所有語言中都能很好的工作。
④在許多情況下,yaml的空白格式可以更容易查看,因為格式化需要更人性化的方法
⑤如果您的編輯器中沒有空格可見或縮進線指示符,那么yaml的空白雖然更緊湊,更容易查看,蛋可能難以手動編輯。
⑥JSON的序列化和反序列化要快得多,因為要檢查的功能明顯少于yaml,這使得更小更輕的代碼能夠處理JSON
⑦一個常見的誤解是yaml需要較少的標點符號并且比JSON更緊湊,但這是完全錯誤的。空格是不可兼得,所以看起來字符比較少,但是如果你計算實際的空格是必要的,以便于正確解釋yaml以及正確的縮進,你會發現yaml實際上需要比json更多的字符。json不使用空格來表示層次結構或分組,并且可以通過刪除不必要的空格來輕松展平,以實現更緊湊的傳輸。
3、YAML的語法格式
Kubernetes支持yaml和json格式管理資源對象
JSON格式:主要用于api接口之間消息的傳遞
YAML格式:用于配置和管理,YAML的配置參數格式比較清晰
語法格式:
①大小寫敏感
②以空格的方式縮進表示層級關系
③通常開頭縮進兩個空格(統一層級對應即可)
④不支持指標符tab縮進,只對空格表示縮進
⑤關鍵詞字符后縮進一個空格,比如冒號都好后面需要縮進一個字符
⑥---表示yaml格式一個文件的開始
⑦支持“#”表示注釋
4、yaml文件組成部分
①控制器定義
5、查看api資源版本標簽
kubectl api-versions
如果是業務場景,一般首選使用 apps/v1(apps/v1 從 v1.9 版本開始提供 API)。在 k8s v1.16 版本之前使用的是 extensions/v1beta1,extensions/v1beta1 從 v1.20 版本開始不再提供 Ingress 資源。帶有 beta 字樣的代表的是測試版本,不用在生產環境中。
6、編寫nginx-deployment.yaml資源配置清單
mkdir /opt/demo
cd /opt/demo/參考模板:
vim nginx-deployment.yaml
apiVersion: apps/v1 #指定api版本標簽
kind: Deployment #定義資源的類型/角色,deployment 為副本控制器,
此處資源類型可以是Deployment、Job、 Ingress、 Service等
metadata: #定義資源的元數據信息,比如資源的名稱、namespace、標簽等信息name: nginx-deployment #定義資源的名稱,在同一個namespace空間中必須是唯一的labels: #定義資源標簽(Pod的標簽)app: nginx
spec: #定義deployment資源需要的參數屬性,諸如是否在容器失敗時重新啟動容器的屬性replicas: 3 #定義副本數量selector : #定義標簽選擇器matchLabels: #定義匹配標簽app: nginx #匹配上面的標簽,需與上面的標簽定義的app保持一致template: #定義業務模板,如果有多個副本,所有副本的屬性會按照模板的相關配置進行匹配metadata:labels:app: nginxspec:containers: #定義容器屬性- name: nginx #定義一個容器名,一個- name: 定義一個容器image: nginx:1.15.4 #定義容器使用的鏡像以及版本ports:- containerPort: 80 #定義容器的對外的端口
6.1創建資源對象
kubectl create -f nginx-deployment.yaml
或者
kubectl apply -f nginx-deployment.yaml
6.2查看創建的pod資源
kubectl get pods -o wide -n kube-publickubectl get deploy -n kube-public
7、創建service服務并對外提供訪問并測試
vim nginx-service.yamlapiVersion: v1
kind: Service
metadata:name: nginx-demo1namespace: kube-publiclabels:name: nginx-demo1
spec:type: NodePortports:- port: 8080targetPort: 80nodePort: 31111selector:app: nginx-demo1kubectl apply -f nginx-service.yamlkubectl get svc -n kube-public在瀏覽器輸入 nodeIP: nodePort 即可訪問
http://192.168.223.11:31111
二、K8s中的port概述
①port
port是k8s集群內部訪問service的端口,即通過clusterIP:port可以從Pod所在的Node上訪問到service
②nodeport
nodeport是外部訪問k8s集群中service的端口,通過nodeIP:nodeport可以從外部訪問到某個service
③targetport
tarport是pod的端口,從port或nodeport來的流量經過kube-proxy反向代理負載均衡轉發到后端pod的targetpod上,最后進入容器
④containerport
containerport是pod內部容器的端口,targetport映射到containerport
1、創建yaml文件模板
kubectl run --dry-run打印相應的api對象而不是執行創建
--dry-run:試運行 kubectl run nginx-ceshi --image=nginx --port=80 --dry-run
--dry-run表示試運行,不是真正的執行命令(測試命令是否正確),即并不會真的創建出pod和deployment實例,去掉該參數后即可真正執行命令。
2、查看生產yaml格式
使用--dry-run試運行可不觸發生產命令,然后通過-o yaml可實現對其yaml資源配置清單的查看
kubectl run nginx-ceshi --image=nginx --port=80 --dry-run -o yaml
3、查看生成的json格式
可以通過-o json查看該命令產生的json配置清單
4、通過yaml格式導出生成模板,并進行修改以及刪除一些不必要的參數
kubectl run nginx-ceshi --image=nginx --port=80 --dry-run -o yaml > nginx-ceshi.yaml
模板:
vim nginx-ceshi.yaml
apiVersion: apps/v1betal #api 版本改成 api/v1
kind: Deployment
metadata:creationTimestamp: null #刪除labels:run: nginx-ceshiname: nginx-ceshi
spec: replicas: 3selector: matchLabels: run: nginx-ceshistrategy: {} #刪除template: metadata: creationTimestamp: null #刪除labels: run: nginx-ceshispec: containers: - image: nginxname: nginx-ceshiports: - containerPort: 80resources: {} #刪除
status: {} #刪除
生成鏡像并查看
將現有的資源生成模板導出
kubectl get pod/nginx-deployment-6f9f6d866c-w2sdc -o yaml -n kube-public###注現在最新版本的kubctl get 不支持 --export 參數
保存到文件中
kubectl get deployment.apps/nginx-deployment -o yaml -n kube-public > my-deploy.yaml
5、查看字段幫助信息
explain可以一層層的查看相關資源對象的幫助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers
6、怎樣可以更輕松的寫yaml
6.1用run命令生成
沒有相關資源,使用run或者create命令--dry-run選項,后期可以修改yaml文件
kubectl run my-deploy --image=nginx --dry-run -o yaml > my-deploy.yaml
6.2用get命令導出
已有相關資源,使用get命令{--export選項:使用老版本的kubectl}
kubectl get deploy/nginx-deployment -o=yaml -n kube-public > new.yaml
6.3yaml文件的學習方法
①多看別人(官方)寫的,能讀懂
②能照著現場的文件改著用
③遇到不懂的,善用kubectl explain ...命令查看
三、具體案例
1、案例需求:
①自主式的pod pod
②資源名稱:my-nginx-ky35
③命名空間:my-ky35
④容器鏡像:nginx:1.14
⑤容器端口:80
⑥標簽:njzb:my-ky35
⑦創建srvice去關聯上面的pod
⑧修改頁面,顯示woshichaoren對外訪問 輸入地址就能訪問
mkdir /opt/demo
[root@master01 ~]]#cd /opt/demo/
[root@master01 demo]]#vim pod-ns-svc.yaml