<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
kubernetes叢集管理叢集資源的唯一入口是通過相應的方法呼叫apiserver的介面
kubectl 是官方的CLI命令列工具,用於與apiserver 進行通訊,將使用者在命令列輸入的命令,組織並轉化為apiserver能識別的資訊,進而實現管理k8s 各種資源的一種有效途徑
kubectl 的命令大全
kubectl --help
k8s中文檔案: http://docs.kubernetes.org.cn/683.html
對資源的增、刪、查操作比較方便,但對改的操作就不容易
kubectl version
kubectl api-resources
kubectl cluster-info
source <(kubectl completion bash)
注意:此時命令補全功能切換環境後是不生效的,如果要使切換環境後也生效需要設定全域性環境變數
vim /etc/bashrc ..... source <(kubectl completion bash) #在底部新增
journalctl -u kubelet -f 或者直接檢視紀錄檔 cat /var/log/messages
kubectl get <resource> [-o wide | json | yaml] [-n namespace]
獲取資源的相關資訊, -n指定命令空間, -o指定輸出格式
resource可以是具體資源名稱,如pod nginx -xxx;也可以是資源型別,如pod; 或者all (僅展示幾種核心資源,並不完整)
--all-namespaces 或-A :表示顯示所有命令空間,
--show-labels :顯示所有標籤
-l app:僅顯示標籤為app的資源
-l app=nginx :僅顯示包含app標籤, 且值為nginx的資源
kubectl get componentstatuseskubectl get cs
命令空間的作用:用於允許不同 命令空間的相同型別的資源重名
kubectl get name space kubectl get ns
kubectl get all [-n default]
kubectl create ns app kubectl get ns
kubectl delete namespace app kubectl get ns
例:在名稱空間kube-public 建立副本控制器( deployment) 來啟動Pod (nginx-cc)
kubectl create deployment nginx-cc --image=nginx -n kube-public
描述某個資源的詳細資訊
kubectl describe deployment nginx-cc -n kube-public kubectl describe pod nginx-cc-5d7d5c6b54 -n kube-public
kubectl get pods -n kube-public
kubectl exec可以跨主機登入容器,docker exec 只能在容器所在主機上登入
kubectl exec -it nginx-cc-df5946cf-6k8rf bash -n kube-public
由於存在deployment/rc之類的副本控制器,刪除pod也會重新拉起來
kubectl delete pod nginx-cc-xxxxx -n kube-public
若pod無法刪除,總是處於terminate狀態, 則要強行刪除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0 #grace-period表示過渡存活期,預設30s,在刪除pod之前允許POD慢慢終止其上的容器程序, 從而優雅退出,0表示立即終止pod
kubectl scale deployment nginx-cc --replicas=3 -n kube-public #擴容 kubectl scale deployment nginx-cc --replicas=1 -n kube-public #縮容
kubectl delete deployment nginx-cc -n kube-public kubectl delete deployment/nginx-cc -n kube-public
建立–>釋出–>更新–>回滾–>刪除
kubectl run --help
##啟動 nginx 範例,暴露容器埠80,設定副本數 3 kubectl run nginx --image=nginx:1.14 --port=80 【--replicas=3】 注:【--replicas=3】 只是用老版本的k8s ,現在的新版本不能使用 kubectl get pods kubectl get all
將資源暴露為新的Service
kubectl expose --help
為deployment(無狀態部署)的nginx建立service, 並通過Service的80埠轉發至容器的80埠上,Service的名稱為nginx-service, 型別為NodePort
kubectl expose pod nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
Kubernetes之所以需要Service, 一方面是因為Pod的IP 不是固定的(Pod可能會重建),另一方面則是因為一組Pod範例之間總會有負載均衡的需求。
Service通過label Selector實現的對一組的Pod的存取。
對於容器應用而言,Kubernetes 提供了基於VIP (虛擬IP)的網橋的方式存取 Service, 再由Service 重定向到相應的Pod。
service的型別:1、ClusterIP:提供一個叢集內部的虛擬IP以供Pod存取( service預設型別
2、NodePort:在每個Node.上開啟一個埠以供外部存取,Kubernetes將會在每個Node.上開啟一個埠並且每個Node的埠都是一樣的,通過NodeIp:NodePort的方式Kubernetes叢集外部的程式可以存取Service。
注:每個埠只能是一種服務,埠範圍只能是30000-32767
3、LoadBalancer:通過外部的負載均衡器來存取,通常在雲平臺部署LoadBalancer還需要額外的費用。
kubectl get pods,svc -o wide
kubectl get endpoints
kubect1 describe svc nginx
kubectl set --help
kubectl set image --help
curl -I http://192.168.111.20:31828 curl -I http://192.168.111.30:31828
kubectl set image pod/nginx-deployment nginx=nginx:1.15
處於動態監聽pod狀態,由於使用的是捲動更新方式,所以會先生成--個新的pod,然後刪除--箇舊的pod,往後依次類推(動態更新的)
kubectl get pods -o wide
kubectl rollout --help
kubectl rollout history deployment/nginx-test01 -n app
kubectl rollout undo deployment.apps/nginx-test01 -n app
kubectl rollout undo deployment.apps/nginx-test01 --to-revision=3 -n app
kubectl rollout status deployment/nginx
//刪除副本控制器 [root@master ~]# kubectl delete deployment/nginx deployment.extensions "nginx" deleted //刪除service [root@master ~]# kubectl delete svc/nginx-service service "nginx-service" deleted [root@master ~]# kubectl get all NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 15h service/nginx NodePort 10.96.59.53 <none> 80:31670/TCP 15h
Deployment控制器支援自定義控制更新過程中的捲動節奏,如“暫停(pause)”或“繼續(resume)”更新操作。比如等待第一批新的Pod資源創
建完成後立即暫停更新過程,此時,僅存在一部分新版本的應用,主體部分還是舊的版本。然後,再篩選一小部分的使用者請求路由到新版本的Pod應用,繼續觀察能否穩定地按期望的方式執行。確定沒問題之後再繼續完成餘下的Pod資源捲動更新,否則立即回滾更新操作。這就是所謂的金絲雀釋出。
(1)更新deployment的版本,並設定暫停deployment kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx kubectl rollout status deployment/nginx #觀察更新狀態 (2)監控更新的過程,可以看到已經新增了一個資源,但是並未按照預期的狀態去刪除一箇舊的資源, 就是因為使用了pause暫停命令 kubectl get pods -W curl [-I] 10.0.0.189 curl [-I] 192.168.111.20:44847 (3)確保更新的pod沒問題了,繼續更新 kubectl rollout resume deployment/nginx (4)檢視最後的更新情況 kubectl get pods -W curl [-I] 10.0.0.189 curl [-I] 192.168.111.20:44847
YAML,即 YAML Ain’t a Markup Language(YAML 不是一種標示語言)的遞迴縮寫。YAML 其實意思是 Yet Another Markup Language(仍是一種標示語言)。它主要強度這種語言是以資料為中心,而不是以標記為中心,而像 XML 語言就使用了大量的標記。
YAML 可讀性高,易於理解,用來表達資料序列化的格式。它的語法和其他高階語言類似,還可以簡單表達陣列、雜湊表,標量等資料形態。它使用空白符號縮排和大量依賴外觀的特色,特別適合用來表達或編輯資料結構、各種組態檔。
YAML 組態檔字尾為.yml,例如application.yml。
yaml 和 json 的主要區別:
Kubernetes支援YAML和JSON 格式管理資源物件
JSON格式:主要用於api介面之間訊息的傳遞
YAML格式:用於設定和管理,YAML的設定引數格式比較清晰
語法格式:
大小寫敏感
以空格的方式縮排標識層級關係
通常開頭縮排兩個空格(統一層級對應即可)
不支援製表符“tab”縮排,只使用空格縮排
關鍵詞字元后縮排一個空格,比如冒號,逗號後面需要縮排一個字元
“---”表示YAML格式,一個檔案的開始支援以“#”表示註釋
欄位說明:
apiVersion | API版本 |
kind | 資源型別 |
metadata | 資源後設資料 |
spec | 資源規格 |
replicas | 副本數量 |
selector | 標籤選擇器 |
template | Pod模板 |
metadata | Pod後設資料 |
spec | Pod規格 |
container | 容器設定 |
K8S---apiVersion對照表:點選這裡
kubectl api-versions
如果是業務場景,一般首選使用 apps/v1(apps/v1 從 v1.9 版本開始提供 API)。
在 k8s v1.16 版本之前使用的是 extensions/v1beta1,extensions/v1beta1 從 v1.20 版本開始不再提供 Ingress 資源。
帶有 beta 字樣的代表的是測試版本,不用在生產環境中。
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: nginx spec: containers: #定義容器屬性 - name: nginx #定義一個容器名,一個- name: 定義一個容器 image: nginx:1.15.4 #定義容器使用的映象以及版本 ports: - containerPort: 80 #定義容器的對外的埠 範例: vim nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: kube-public labels: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx-demo1 template: metadata: labels: app: nginx-demo1 spec: containers: - name: nginx image: nginx:1.15.4 ports: - name: http containerPort: 80
kubectl create -f nginx-deployment.yaml 或者 kubectl apply -f nginx-deployment.yaml
kubectl get pods -o wide -n kube-public kubectl get deploy -n kube-public
apiVersion: v1 kind: Service metadata: name: nginx-demo1 namespace: kube-public labels: name: nginx-demo1 spec: type: NodePort ports: - port: 8080 targetPort: 80 nodePort: 31333 selector: app: nginx-demo1
kubectl apply -f nginx-server.yaml kubectl get svc -n kube-public
在瀏覽器輸入 nodeIP: nodePort 即可存取 http://192.168.111.20:31333 http://192.168.111.30:31333
●port
port是k8s叢集內部存取service的埠,即通過clusterIP: port可以從Pod所在的Node. 上存取到service
●nodePort
nodePort是外部存取k8s叢集中service的埠,通過nodeIP: nodePort 可以從外部存取到某個service。
●targetPort
targetPort是Pod的埠,從port或nodePort來的流量經過kube-proxy 反向代理負載均衡轉發到後端Pod的targetPort上,最後進入容器。
●containerPort
containerPort是Pod內部容器的埠,targetPort 對映到containerPort
kubectl run --dry-run 列印相應的API 物件 而不執行建立
--dry-run
:試執行
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run
--dry-run
表示試執行,不真正執行命令(測試命令是否正確),即並不會真的建立出 pod 和 deployment 範例,去掉該引數後即可真正執行命令。
使用--dry-run
試執行可不觸發生成命令,然後通過-o yaml
可實現對其 yaml 資源設定清單的檢視
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml
可通過 -o json 檢視該命令產生的 json 設定清單
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o json
kubectl run nginx-test --image=nginx --port=80 --replicas=3 --dry-run -o yaml > nginx-test.yaml
模板: vim nginx-test.yaml apiVersion: apps/v1betal #api 版本改成 api/v1 kind: Deployment metadata: creationTimestamp: null #刪除 labels: run: nginx-test name: nginx-test spec: replicas: 3 selector: matchLabels: run: nginx-test strategy: {} #刪除 template: metadata: creationTimestamp: null #刪除 labels: run: nginx-test spec: containers: - image: nginx name: nginx-test ports: - containerPort: 80 resources: {} #刪除 status: {} #刪除 例: apiVersion: v1 kind: Service metadata: labels: name: nginx-demo2 name: nginx-demo2 namespace: kube-public spec: ports: - port: 8044 protocol: TCP targetPort: 80 selector: run: nginx-demo2 type: NodePort
kubectl apply -f nginx-test.yaml kubectl get svc -n kube-public
kubectl get pod/nginx-deployment-6f9f6d866c-2w9gz -o yaml -n kube-public ###注現在最新版本的kubctl get 不支援 --export 引數
kubectl get deployment.apps/nginx-deployment -o yaml -n kube-public > my-deploy.yaml
explain 可一層層的檢視相關資源物件的幫助資訊
kubectl explain deployments.spec.template.spec.containers 或 kubectl explain pods.spec.containers
沒有相關資源,使用run或者create命令--dry-run
選項,後期可以修改yaml檔案。
kubectl run my-deploy --image=nginx --dry-run -o yaml > my-deploy.yaml
已有相關資源,使用get命令 【--export
選項 :適用老版本的kubectl】
kubectl get deploy/nginx-deployment -o=yaml -n kube-public > new.yaml
yaml檔案的學習方法
(1)多看別人(官方)寫的,能讀懂
(2)能照著現場的檔案改著用
(3)遇到不懂的,善用kubectl explain ...命令查
到此這篇關於K8S 中 kubectl 命令的文章就介紹到這了,更多相關K8S kubectl 命令內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45