網站首頁 編程語言 正文
Kubectl 命令大全
下面列出了 kubectl 的所有命令以及其縮寫形式,供翻閱查詢。
kubectl 命令格式:
kubectl [command] [type] [Name] [flag]
all | events?(ev) | podsecuritypolicies?(psp) |
---|---|---|
certificatesigningrequests?(csr) | horizontalpodautoscalers?(hpa) | podtemplates |
clusterrolebindings | ingresses?(ing) | replicasets?(rs) |
clusterroles | jobs | replicationcontrollers?(rc) |
clusters?(valid only for federation apiservers) | limitranges?(limits) | resourcequotas?(quota) |
componentstatuses?(cs) | namespaces?(ns) | rolebindings |
configmaps?(cm) | networkpolicies?(netpol) | roles |
controllerrevisions | nodes?(no) | secrets |
cronjobs | persistentvolumeclaims?(pvc) | serviceaccounts?(sa) |
customresourcedefinition?(crd) | persistentvolumes?(pv) | services?(svc) |
daemonsets?(ds) | poddisruptionbudgets?(pdb) | statefulsets |
deployments?(deploy) | podpreset | storageclasses |
endpoints?(ep) | pods?(po) | ? |
安裝 Kubernetes-Dashboard
Kubernetes-Dashboard 是一個 管理 Kubernetes 集群的 Web UI,跟 kubectl 一樣,其后端是 API-Server,使用在線的 YAML 文件部署 Kubernetes-Dashboard :
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
dashboard 創建后會在 kubernetes-dashboard 命名空間中。
root@instance-1:~# kubectl get pods --namespace=kubernetes-dashboard NAME READY STATUS RESTARTS AGE dashboard-metrics-scraper-856586f554-4nd9v 1/1 Running 0 9d kubernetes-dashboard-78c79f97b4-288js 1/1 Running 0 9d root@instance-1:~# kubectl get services --namespace=kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-metrics-scraper ClusterIP 10.98.50.1238000/TCP 9d kubernetes-dashboard NodePort 10.111.44.44 443/TCP 9d
由于其網絡默認是 NodePort 的方式,沒有配置外界打開,所以為了能夠被外界訪問,可以修改其 service:
kubectl edit service kubernetes-dashboard --namespace=kubernetes-dashboard
ports: - nodePort: 30633 port: 443 protocol: TCP targetPort: 8443 selector: k8s-app: kubernetes-dashboard sessionAffinity: None type: NodePort
或者把 type 修改為 LoadBalancer。
在集群內網可以通過 443 訪問,在外網可以通過 30633 訪問,訪問方式是 https。
可以看到,訪問方式有 Token 和配置文件方式(kubeconfing),這兩者后面再講。
通過下面這條命令我們可以查看 Token:
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
復制,填寫到 Web UI 中,即可進入控制臺。
RESTful API
我們可以集群中的任意節點訪問 API-Server ,其端口是 6443。
API 可以使用 Token 和 證書方式 進行認證,我們可以使用上一小節查詢出來的 token,對 API 進行訪問:
curl https://k8smaster:6443/api/v1/pods -k --header "Authorization: bearer {此處填寫你的token}"
注:使用 -k 可以忽略證書問題;k8smaster 是筆者配置 hosts 的,具體要以你的 主節點 ip為準。
也可以使用證書訪問 API,其格式如下:
curl --cert /tmp/client.pem --key /tmp/client-key.pem \ --cacert /tmp/ca.pem -v -XGET \ https://k8smaster:6443/api/v1/pods
這里不多介紹 k8s 的 API,只介紹幾個對調試有用的 API。
GET /api/v1/namespaces/{namespace}/pods/{name}/exec GET /api/v1/namespaces/{namespace}/pods/{name}/log GET /api/v1/watch/namespaces/{namespace}/pods/{name}
鑒權
由于 API-Server 需要一定權限才能訪問,所以實際上用戶使用 kubectl 工具時,也需要權限才能執行命令。
kubectl auth can-i?
命令用來確定一個用戶是否能夠訪問 API。
如果要確定當前用戶是否有權限訪問 deployments,可以使用:
kubectl auth can-i create deployments
kubectl auth can-i {命令}
如果要檢查其它用戶是否有權限,可以使用?--as
:
kubectl auth can-i create deployments --as ddddd
kubectl auth can-i create deployments --as ddddd --namespace kube-system
為了更加方便地獲得權限,我們可以使用 SelfSubjectAccessReview 這個 API 來獲得權限信息資源,它將 API 服務器鑒權公開給外部服務,其 API 說明文檔地址:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#selfsubjectaccessreview-v1-authorization-k8s-io
另外還有三個相關的 API:
-
SubjectAccessReview
?- 對任意用戶的訪問進行評估,而不僅僅是當前用戶。 當鑒權決策被委派給 API 服務器時很有用。例如,kubelet 和擴展 API 服務器使用 它來確定用戶對自己的 API 的訪問權限。 -
LocalSubjectAccessReview
?- 與?SubjectAccessReview
?類似,但僅限于特定的 名字空間。 -
SelfSubjectRulesReview
?- 返回用戶可在名字空間內執行的操作集的審閱。 用戶可以快速匯總自己的訪問權限,或者用于 UI 中的隱藏/顯示動作。
這里只需要了解,不需要深入。
注解
我們可以使用 Kubernetes 注解為對象附加任意的非標識的元數據,注解使用 annotations 標識??蛻舳顺绦颍ɡ绻ぞ吆蛶欤┠軌颢@取這些元數據信息。
我們查看 dashboard 的相關 annotations :
kubectl describe services -n kubernetes-dashboard
... ... Labels: k8s-app=kubernetes-dashboard Annotations:... ...
annotations 由 key/value 組成,類似 label,但是 annotations 支持一些特殊字符,可以用作構建發布鏡像時的信息、日志記錄等。
kubectl annotate service kubernetes-dashboard -n kubernetes-dashboard description='my test'
key=description value=my test
重新查看 describe,可以看到:
Annotations: description: my test
如果要覆蓋 key 的值,需要加上?--overwrite
?。
如果要刪除一個 key:
kubectl annotate service kubernetes-dashboard description-
Pod YAML 結構
這是一個簡單的 YAML 文件:
apiVersion: v1 kind: Pod metadata: name: firstpod spec: containers: - image: nginx name: stan
k8s 的 YAML 必須包含四個部分:
- apiVersion:API 組的版本
- kind:創建的對象類型
- metadata:元數據,name 字段必填
- spec:怎么創建對象,如果是 pod,則 container 必填。
配置
在?$HOME/.kube/config
?文件中存儲了 Kubernetes 的配置信息,可以直接打開文件查看,也可以通過?kubectl config view
?查看(只顯示部分信息)。
前面我們訪問 API 時,使用了 token,現在我們可以通過這個 config,來創建證書文件,通過證書訪問。。
client 密鑰,就在這個 config 文件的?client-certificate-data
?字段中存儲。
grep client-cert $HOME/.kube/config |cut -d" " -f 6
key,在 client-key-data 字段中存儲:
grep client-key-data $HOME/.kube/config |cut -d " " -f 6
API-Server 的公鑰(auth),就在 certificate-authority-data 字段中存儲:
grep certificate-authority-data $HOME/.kube/config |cut -d " " -f 6
意思就是三個重要的 密鑰數據,這里為了方便,分別使用 client、key、auth 三個變量存儲查詢的數據。
export client=(grep client-cert $HOME/.kube/config |cut -d" " -f 6) export key=(grep client-key-data $HOME/.kube/config |cut -d " " -f 6) export auth=(grep certificate-authority-data $HOME/.kube/config |cut -d " " -f 6)
創建證書文件:
echo $client | base64 -d - > ./client.pems echo $key | base64 -d - > ./client-key.pem echo $auth | base64 -d - > ./ca.pem
然后訪問的時候就可以通過證書安全地訪問 API-Server:
curl --cert ./client.pem --key ./client-key.pem --cacert ./ca.pem https://k8smaster:6443/api/v1/pod
原文鏈接:https://www.cnblogs.com/whuanle/p/14719723.html
相關推薦
- 2022-11-13 ASP.NET?MVC使用Session會話保持表單狀態_實用技巧
- 2022-08-14 Gradle?Build?Cache引發的Task緩存編譯問題_Android
- 2022-10-14 WebSecurityConfigurerAdapter已棄用
- 2022-10-02 react?redux及redux持久化示例詳解_React
- 2023-07-04 maven引入本地jar,打包問題
- 2022-11-12 Python?sklearn分類決策樹方法詳解_python
- 2023-01-17 Qt中控件的函數使用教程分享_C 語言
- 2022-12-09 Opencv中的cv2.calcHist()函數的作用及返回值說明_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支