kubernetes(k8s)使用声明式管理与 创建yaml模板文件
生活随笔
收集整理的這篇文章主要介紹了
kubernetes(k8s)使用声明式管理与 创建yaml模板文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一:聲明式管理方法
- 1.1 什么是聲明式管理
- 1.2 查看資源配置
- 1.2.1 查看資源配置清單
- 1.2 使用explain 解釋資源配置清單
- 1.3 修改資源配置清單并應用
- 1.3.1 離線修改
- 1.3.2 在線修改
- 1.4 刪除資源配置清單
- 1.4.1 陳述式刪除
- 1.4.2 聲明式刪除
- 二:使用YALML 管理資源對象
- 2.1 k8s 的yaml
- 2.2 查看api 資源版本標簽
- 2.3 編寫yaml 文件
- 2.4 使用yaml 文件創建資源對象
- 2.5 使用service 服務對外提供訪問并測試
- 2.5.1 創建service資源的yaml文件
- 2.5.2創建資源對象
- 2.5.3 訪問測試
- 2.6 詳解k8s中port
- 三: 創建模板
- 3.1 使用--dry-run 試運行的方式生成模板,創建資源
- 3.1.1 生成模板
- 3.1.2 修改模板
- 3.1.3 根據生成的模板創建資源
- 3.2 使用現有的資源生成模板導出
- 3.2.1 生成模板
- 3.2.2 修改模板
- 3.2.3 根據模板生成資源
一:聲明式管理方法
1.1 什么是聲明式管理
聲明式管理方法:
- 適合于對資源的修改操作
- 聲明式資源管理方法依賴于資源配置清單文件對資源進行管理
- 資源配置清單文件有兩種格式: yaml (人性化,易讀) , json (易于api接口解析)
- 對資源的管理,是通過事先定義在統一資源配置清單內,再通過陳述式命令應用到k8s集群里
- 語法格式: kubectl ?create/apply/delete ?-f ?xxxx. yaml
1.2 查看資源配置
1.2.1 查看資源配置清單
#將資源配置輸出為yaml 格式 kubectl -n kube-public get deployments.apps nginx -o yaml1.2 使用explain 解釋資源配置清單
#查看deployment資源配置里字段解釋(只能看到第一層的字段) kubectl explain -n kube-public deployment#查看deployment里的metadata字段解釋 kubectl explain -n kube-public deployment.metadata#查看service 資源配置里的第一層字段解釋 kubectl explain -n kube-public service#查看service配置里,metadata字段的解釋 kubectl explain -n kube-public service.metadata1.3 修改資源配置清單并應用
1.3.1 離線修改
離線修改:
修改yaml 文件,并用 kubectl apply -f xxx.yaml 文件使之生效。
注意:當apply 不生效時,先使用delete 清除資源,在apply 創建資源
create 和 apply 的區別
- 都可以使用 kubectl create/apply -f xxx.yaml 創建資源
- create:只能用于創建,不能apply更新。 如果要更新需要先delete 刪除資源,在create/apply創建 新的
- apply:可以創建,也可以直接更新
1.3.2 在線修改
直接使用kubectl edit service nginx在線編輯資源配置清單,并保存退出。保存退出后立即生效(如port:888)此修改方式不會對yaml 文件內容修改
#使用kubect edit 在線修改 資源 kubectl edit -n kube-public service#將port 值修改為888,并保存退出kubectl get svc -n kube-public1.4 刪除資源配置清單
1.4.1 陳述式刪除
#陳述式刪除 kubectl -n kube-public delete service nginx-service1.4.2 聲明式刪除
#指定yaml 文件,聲明式刪除 kubectl delete -f nginx-svc.yaml二:使用YALML 管理資源對象
2.1 k8s 的yaml
Kubernetes支持YAML和JSON格式管理資源對象
- JSON格式:主要用于api接口之間消息的傳遞
- YAMI格式:用于配置和管理, YAML是一種簡潔的非標記性語言,內容格式人性化,較易讀
YAML語法格式:
- 大小寫敏感使用縮進表示層級關系
- 不支持Tab鍵制表符縮進,只使用空格縮進
- 縮進的空格數目不重要,只要相同層級的元素左側對齊即可,通常開頭縮進兩個空格
- 符號字符后縮進一個空格,如冒號,逗號,短橫桿(-)等
- "—"表示YAMI格式,一個文件的開始,用于分隔文件
- "#"表示注釋
2.2 查看api 資源版本標簽
# 查看api 的版本,不同的k8s版本,支持的api version不同 kubectl api-versions2.3 編寫yaml 文件
[root@master ~]# mkdir /opt/demo [root@master ~]# cd /opt/demo/ [root@master demo]# vim nginx-deploymenet.yaml apiVersion: apps/v1 #指定api版本標簽 kind: Deployment #定義資源的類型。可以是Deployment,Job,Ingress,Service等 metadata: #定義資源的元數據信息,比如資源的名稱,namespace,標簽等信息name: nginx-deployment #定義資源的名稱,在同一個namespace空間中必須是唯一的namespace: default #定義命名空間labels: #定義Deployment資源標簽app: nginxspec: #定義deployment資源需要的參數屬性,如,是否在容器失敗時重啟容器的屬性replicas: 3 #定義副本的數量selector: #定義標簽選擇器matchLabels: #定義匹配的標簽app: nginx #需要與.spec.template.metadata.labels定義的標簽保持一致template: #定義 業務模板,如果有多個副本,所有的副本屬性會按照模板的相關配置進行匹配metadata: #定義pod使用的元信息 labels: #定義Pod副本將使用的標簽,需要與.spec.selector.matchLabels 定義的標簽保持一致app: nginx spec: #定義pod副本的屬性(如pod里有幾個容器,容器名,容器鏡像,端口等) containers: #定義容器屬性- name: nginx #容器的名稱image: nginx:1.15.12 #容器使用的鏡像ports: #定義容器使用的端口- containerPort: 80 #容器使用80端口ports: - containerPort: 802.4 使用yaml 文件創建資源對象
#創建資源對象 kubectl create -f nginx-deploymenet.yaml#查看pod的信息 kubectl get pods -o wide#查看pod使用的標簽 kubectl get pods --show-labels2.5 使用service 服務對外提供訪問并測試
2.5.1 創建service資源的yaml文件
vim nginx-service.yaml apiVersion: v1 kind: Service #定義資源類型為Service metadata: #定義Service的元信息name: nginx-service #定義service的名稱namespace: default #定義service的命名空間(和deployment在一個空間)labels: #定義service的標簽app: nginxspec: #設置service的屬性type: NodePort #指定service的類型,使用NodePort。ports: #指定端口,一個容器里的服務,對應一個端口。有幾個服務,就創建幾組- port: 8888 #指定ClusterIP 使用的端口targetPort: 80 #指定pod使用的端口nodePort: 31234 #如不指定,會在30000-32767 隨機分配 selector: #使用標簽選擇器去選擇和對應的pod進行關聯app: nginx2.5.2創建資源對象
#創建資源對象 kubectl create -f nginx-service.yaml#查看svc資源 kubectl get svc2.5.3 訪問測試
curl -I http://192.168.23.12:31234 curl -I http://192.168.23.13:312342.6 詳解k8s中port
- port
- 是k8s集群內部訪問service的端口,即通過clusterIP: port可以從Pod所在的Node上訪問到service.
- nodePort
- nodePort是外部訪問k8s集群中service的端口,通過nodelP: nodePort可以從外部訪問到某個service4
- targetPort
- targetport是Pod的端口,從port或nodeport來的流量經過kube-proxy反向代理負載均衡轉發到后端Pod的targetPort上,最后進入容器。
- containerPort
- containerPort是Pod內部容器的端口, targetPort映射到containerPort
三: 創建模板
3.1 使用–dry-run 試運行的方式生成模板,創建資源
3.1.1 生成模板
#kubectl run --dry-run 打印相應的API對象而不執行創建 kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run#查看,并沒有生成相應的pod kubectl get pods #查看生成的yaml 格式 kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml #查看生成的json格式 kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o json#使用yaml 格式導出生成模板,并進行修改,刪除一些不必要的參數 kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml > nginx-test.yaml3.1.2 修改模板
vim nginx-test.yaml apiVersion: apps/v1 kind: Deployment metadata:labels:run: nginx-testname: nginx-test spec:replicas: 3selector:matchLabels:run: nginx-testtemplate:metadata:labels:run: nginx-testspec:containers:- image: nginxname: nginx-testports:- containerPort: 803.1.3 根據生成的模板創建資源
#根據模板創建資源 kubectl apply -f nginx-test.yamlkubectl get pods3.2 使用現有的資源生成模板導出
3.2.1 生成模板
#將現有的資源生成模板導出。 --export 可以刪除一些多余的配置 kubectl get deployments.apps nginx-deployment --export -o yaml#將模板保存到文件中 kubectl get deployments.apps nginx-deployment --export -o yaml > my-deploy.yaml3.2.2 修改模板
vim my-deploy.yaml apiVersion: apps/v1 kind: Deployment metadata:labels:app: nginxname: my-deploy spec:progressDeadlineSeconds: 600replicas: 3revisionHistoryLimit: 10selector:matchLabels:app: mydeploy-nginxstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: mydeploy-nginx spec:containers:- image: nginx:1.15.12name: nginxports:- containerPort: 80protocol: TCPterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-scheduler3.2.3 根據模板生成資源
#根據模板生成資源 kubectl apply -f my-deploy.yaml#查看生成的deployment 信息 kubectl get deployments.apps my-deploy 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的kubernetes(k8s)使用声明式管理与 创建yaml模板文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kubectl 命令管理(1)
- 下一篇: k8s的pod资源管理与配置使用凭证的h