k8s-命令使用


kubeadm命令使用

kubeadm alpha              #kubeadm 處於測試階段的命令

kubeadm completion bash    #bash 命令補全,需要安裝 bash-completion

kubeadm config             #管理 kubeadm 集群的配置,該配置保留在集群的 ConfigMap 中(配置文件)

kubeadm config print init-defaults   #kubeadm默認初始化所執行的操作,可以通過此命令將初始化配置導入到一個文件中,通過這個文件進行master初始化

kubeadm help    
kubeadm init     #啟動一個 Kubernetes 主節點
kubeadm join     #將節點加入到已經存在的 k8s master,包括master及node節點

kubeadm reset    
#還原使用 kubeadm init 或者 kubeadm join 對系統產生的環境變化;當在一個節點執行kubeadm join,把節點加入到master上,會在當前節點產生一些數據;kubeadm reset 用於清空kubeadm init 或者 kubeadm join所產生的數據,在哪個節點執行,相當於把哪個節點的初始化數據或者加入到master所產生的數據都刪除,從而把該節點從k8s集群中剔除,把一個節點從k8s集群刪除時,會從etcd中把該節點的數據刪除,並且會把這個節點本機上添加到master時所產生的數據也清空
 
kubeadm token    
#管理kubeadm產生的token;如果訪問k8s的API,要么使用賬號密碼,要么使用token;第一次訪問k8s的API,認證通過后會返還一個token,下次再訪問API使用token認證即可,但是token有有效期

kubeadm upgrade  #升級 k8s 版本
kubeadm version  #查看版本信息

kubeadm token list   #列出所有token
	create   #創建 token,默認有效期 24 小時;當token到期后,還想把node節點加入集群,則需要在master節點使用創建token的命令,創建一個新的token,node節點使用master新創建出的token作為認證
 	delete   #刪除 token
 	generate #生成並打印 token,但不在服務器上創建,即將 token 用於其他操作

kubeadm init 命令簡介

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm/ #命令使用

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/ #集群初始化

在三台 master 中任意一台 master 進行集群初始化,而且集群初始化只需要初始化一次。初始化信息會存放到etcd中,master是不存放任何數據的,如果在多台master執行kubeadm init初始化,則可能會造成集群初始化失敗,或者k8s集群初始化后,使用不了
root@test:~# kubeadm init --help
--apiserver-advertise-address string     #K8S API Server 將要監聽的本機 IP

--apiserver-bind-port int32              #API Server 綁定的端口,默認為 6443,端口類型為整數

--apiserver-cert-extra-sans stringSlice  #可選的證書額外信息,用於指定 API Server 的服務器證書。可以是 IP 地址也可以是 DNS 名稱。

--cert-dir string                        #證書的存儲路徑,缺省路徑為 /etc/kubernetes/pki

--certificate-key string                 #定義一個用於加密 kubeadm-certs Secret 中的控制平台證書的密鑰

--config string    #kubeadm配置文件的路徑,不用配,保持默認即可,會在當前用戶的家目錄生成;配置文件的作用是kubectl連接apiserver的重要憑據,控制端容器也會生成配置文件

--control-plane-endpoint string
#為控制平台指定一個穩定的 IP 地址或 DNS 名稱,即配置一個可以長期使用且是高可用的 VIP 或者域名,k8s 多 master 高可用基於此參數實現,--apiserver-advertise-address 此參數指定的是本機的apiserver的監聽地址,所以--control-plane-endpoint參數給master提供了一個穩定的地址,這個地址不管到master集群的哪個master節點上,都是不變的,一般為haproxy的VIP,使用VIP對k8s的控制端進行統一訪問和調度

--cri-socket string 
#要連接的 CRI(容器運行時接口,Container Runtime Interface, 簡稱 CRI)套接字的路徑,如果為空,則 kubeadm 將嘗試自動檢測此值,"僅當安裝了多個CRI(即多個公司開發的容器)或具有非標准 CRI 插槽時,才使用此選項"

--dry-run                         #不要應用任何更改,只是輸出將要執行的操作,其實就是測試運行。

--experimental-kustomize string   #用於存儲 kustomize 為靜態 pod 清單所提供的補丁的路徑。

--feature-gates string            #一組用來描述各種功能特性的鍵值(key=value)對,選項是:IPv6DualStack=true|false (ALPHA - default=false)

--ignore-preflight-errors strings 
#k8s在初始化時,會對系統進行各種檢查,可以忽略檢查過程中出現的錯誤信息,比如忽略 swap,如果為 all 就忽略所有;如果有交換分區,可以使用此參數忽略交換分區的檢查

--image-repository string      
#設置一個鏡像倉庫,默認為 k8s.gcr.io;kubeadm在初始master時,會下載一些鏡像,包括k8s管理端所需要的三個核心組件的鏡像及其他鏡像,該鏡像倉庫是google的,無法訪問,需要換成國內鏡像倉庫, registry.cn-hangzhou.aliyuncs.com/google_containers/

--kubernetes-version string      #指定安裝 k8s 版本,默認為 stable-1

--node-name string               #指定 node 節點名稱;node節點或master添加到k8s集群后,通過主機名區分各個節點,所以需要確保主機名在k8s集群中的唯一性

--pod-network-cidr               #設置 pod ip 地址范圍;指定給容器使用的IP地址段,確保k8s集群中的三個網絡不能沖突

--service-cidr                   #設置 service 網絡地址范圍

--service-dns-domain string      #設置 k8s 內部域名,默認為 cluster.local,會有相應的 DNS 服務(kube-dns/coredns)解析生成的域名記錄。需要指定一個新的service域名的后綴

--skip-certificate-key-print     #不打印用於加密的 key 信息

--skip-phases strings            #要跳過哪些階段

--skip-token-print               #跳過打印 token 信息;此選項不指定,需要通過token才能把node節點添加到master

--token                          #指定 token;設置固定token

--token-ttl                      #指定 token 生命周期,默認為 24 小時,0 為永不過期

--upload-certs                   #更新證書

#全局可選項:
--add-dir-header          #如果為 true,在日志頭部添加日志目錄
--log-file string         #設置日志名稱
--log-file-max-size uint  #設置日志文件的最大大小,單位為兆,默認為 1800 兆,0 為沒有限制
--rootfs                  #給日志設置宿主機的根路徑,也就是絕對路徑;不指定默認記錄在/var/log/syslog
--skip-headers            #如果為 true,在 log 日志里面不顯示標題前綴
--skip-log-headers        #如果為 true,在 log 日志里里不顯示標題

kubectl命令使用

Kubectl是用於控制Kubernetes集群的命令行工具。kubectl在$HOME/.kube目錄中查找名為config的文件。可以通過設置KUBECONFIG環境變量或設置標志來指定其他kubeconfig文件--kubeconfig。

k8s集群中,基於namespace將各個業務的pod進行隔離

對k8s集群資源對象的增刪改查

kubectl create namespace xxx
#創建一個namespace,也可以使用-f的方式,指定一個yml文件進行資源對象的創建,也可以從網上下載構建;已被kubectl apply 替代

kubectl delete namespace xxx
#刪除指定名稱的namespace

kubectl edit service service_name
#動態編輯一個資源對象,可以是service、pod等;編輯一個service,改完后立即生效

kubectl get 資源對象 
#查看指定資源對象的狀態信息;如service、pod、secret(秘鑰)、namespace、node、csr(列出所有節點加入集群的申請請求)等;配合 -o wide,顯示詳細信息;配合 -A,列出k8s集群中所有指定的資源對象 

kubectl describe 資源對象 對象名稱 -n namespace_name
#查看指定對象的詳細信息,指定對象名稱,以及所屬的namespace名稱,如果不指定namespace,默認查看的是default;如果查看pod的詳細信息,發現pod無法創建,需要到Pod所在的宿主機查看系統日志;k8s的日志默認都是存放在系統日志中

kubectl logs -f pod_name
#查看一個pod的日志

kubectl exec -it pod_name bash -n namespace_name
#可以進入到k8s集群中任何一個node節點的容器中,而docker exec只能進入到本機的容器中

kubectl explain deployment
#查看在yml文件中,資源對象的使用方法

kubectl explain deployment.apiVersion
#查看一個對象下apiversion,在yml文件中的配置方法,yml文件有嚴格的上下級關系

kubectl exec -it pod_name -c container_name bash -n namespace_name
#進入指定pod中的指定容器中;如果不指定容器名稱,則默認進入pod中的第一個容器中

kubectl create serviceaccount user_name -n namespace_name
#創建一個用戶,指定該用戶所屬的namespace

kubectl get serviceaccount -A
#查看當前k8s集群中,所有用戶

kubectl get role -n namespace_name
#查看指定namespace下的role


實例:
kubectl get nodes     #列出集群中所有節點的信息,可以加-o wide,更詳細的顯示

kubectl get csr       #列出所有的申請請求的狀態(節點加入集群的申請請求)

kubectl get pod -A    #查看當前k8s集群中所有namespaces下的pod

kubectl get pod -n namespace_name  #查看指定namespace中pod的信息

kubectl get pod -A -o wide   #顯示更詳細的結果

kubectl get service   #列出所有的service,可以加-o wide,更詳細的顯示

kubectl describe service service_name  
#查看某個service的更詳細的信息;describe可以查看對象的詳細信息

kubectl run net-test1 --image=alpine --replicas=3 sleep 360000   
#通過kubectl命令創建3個容器在不同的node節點上,進行測試

kubectl delete -f kube-flannel.yml    
#刪除指定yml文件的所有容器,並且pod被刪除后,不會在自動創建

kubectl delete pod pod_name -n namespace_name   
#刪除指定namespace中的pod,刪除完之后,會自動重建 

kubectl get deployment -n namespace_name
#查看指定namespace下的所有deployment類型的控制器

kubectl delete deployment deployment_name -n namespace_name
#刪除指定namespace下的指定名稱的deployment控制器;並且控制器所管理的pod也將全部被刪除,並且不會自動創建

kubectl get secret -A     #查看k8s集群所有的秘鑰

kubectl describe secret token_name -n namespace_name  
#查看指定namespace里的指定token的詳細信息

kubectl describe service service_name   #查看指定service的詳細信息

kubectl get ep -n namespace_name
#列出指定namespace中所有service與endpoint的對應關系

kubectl get hpa -n namespace_name
#查看指定namespace中的hpa控制器

kubectl get pv                     #查看pv狀態

kubectl get pvc -n namespace_name  #查看指定namespace下的pvc狀態

修改coredns數量

coredns組件是沒有yml文件的,需要執行以下步驟才可修改coredns數量

1、kubectl get deployment -A    #查看所有deployment,以及所屬namespace

2、kubectl edit deployment coredns -n kube-system
#找到coredns的deployment后,編輯coredns的deployment控制器,指定控制器名稱以及所屬namespace,保存退出后立即生效

配置命令

kubectl label node node1 group=linux-test1
#給節點名為node1的node節點打個 group=linux-test1 的標簽,以實現pod和node的親和性,后期讓pod創建在指定標簽的node節點上;資源對象除了node還可以指定pod

kubectl apply -f file_name.yml     
#根據yml文件,創建資源對象,如果yml文件不在本地,可以指定URL,會自動總網上下載下來,然后構建;通過apply指定yml文件,從而創建pod,並且apply已經把create替代;
apply的優勢在於支持對yml文件的多次修改和動態生效、歷史回滾,即修改完yml文件后,再次執行 kubectl apply -f file_name.yml,就會把yml文件發生變化的部分進行構建,但是create不行;
create只支持單次創建yml文件的資源,后期修改了yml文件想生效,需要先執行 kubectl delete -f file_name.yml,刪除已經構建好的pod,然后再執行 kubectl create -f file_name.yml;
必須是刪除原有的pod后,再執行create,如果是先修改了 yml 文件,在刪除,則會可能找不到pod或者刪除別的pod,因為執行delete的時候,是以現有 yml 文件內容為准,所以必須先刪除現有 pod,在修改 yml 文件

集群管理命令

kubectl top
#查看集群運行狀態;可以指定node、pod等對象進行指標收集;需要安裝好 Metrics 服務才能收集node節點的指標數據

kubectl cluster-info
#查看k8s集群中服務的訪問方式

kubectl cordon node_name
#創建pod時,被指定的節點將不會被scheduler進行調度

kubectl uncordon node_name
#取消警戒標記為cordon的node

kubectl drain node_name
#驅逐node上的pod(驅逐的是無狀態服務,核心pod是不會被驅逐的)到其他節點上,用戶node下線等場景

kubectl taint node_name
#給node標記污點,實現pod與node反親和性,pod不創建在有這個label標記的node節點上

kubectl version
#查看kubectl命令版本,也可以看到 go 的版本

kubectl api-resources
#查看k8s的API的所有資源對象

kubectl api-versions
#查看各個api分組的api版本

kubectl top node
#查看k8s集群中每個node節點的內存、CPU使用情況;需要k8s集群提前安裝好metrics-server

kubectl top pod -n namespace_name
#查看指定namespace下的pod的資源使用情況;需要k8s集群提前安裝好metrics-server


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM