[TOC]
0x00 前言简述 描述: 学习 Kubernetes 最重要的是其基础的理论概念以及实践操作, 而实际操作又必不可少的是k8s相关的命令,所以为了方便自己以及读者的查阅,将自己在学习过程中所遇的命令进行一个简单的记录;
0x01 Kubeadm 命令 - 用来初始化集群的指令 描述:该命令是安装K8s后的基础命令可以进行K8s主或者从节点的初始化,以及节点加入管理;
init - 初始化配置相关 描述:该命令用户初始化节点设置master节点的控制面板以及网络相关的设置;
命令参数
参数说明:
[TOC]
0x00 前言简述 描述: 学习 Kubernetes 最重要的是其基础的理论概念以及实践操作, 而实际操作又必不可少的是k8s相关的命令,所以为了方便自己以及读者的查阅,将自己在学习过程中所遇的命令进行一个简单的记录;
0x01 Kubeadm 命令 - 用来初始化集群的指令 描述:该命令是安装K8s后的基础命令可以进行K8s主或者从节点的初始化,以及节点加入管理;
init - 初始化配置相关 描述:该命令用户初始化节点设置master节点的控制面板以及网络相关的设置;
命令参数
参数说明:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --apiserver-advertise-address string : API 服务器所公布的其正在监听的 IP 地址。 --apiserver-bind-port int32 : API 服务器绑定的端口, 默认值:6443 --apiserver-cert-extra-sans stringSlice : 用于 API Server 服务证书的可选附加主题备用名称(SAN),可以是 IP 地址和 DNS 名称。 --certificate-key string :用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。 --control-plane-endpoint string : 为控制平面指定一个稳定的 IP 地址或 DNS 名称。 --image-repository string :选择用于拉取控制平面镜像的容器仓库,默认值:"k8s.gcr.io" , 国内一般要设置镜像源。 --kubernetes-version string :为控制平面选择一个特定的 Kubernetes 版本,默认值:"stable-1" 。 --cri-socket string :指定要连接的 CRI 套接字的路径。 --node-name string : 指定节点的名称。 --pod-network-cidr string : 指明 pod 网络可以使用的 IP 地址段,如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。(flannel-10.244.0.0/16) --service-cidr string : 为服务的虚拟 IP 地址另外指定 IP 地址段, 默认值:"10.96.0.0/12" --service-dns-domain string :为服务另外指定域名,默认值:"cluster.local" --token string :用于建立控制平面节点与工作节点间的双向通信,格式为`[a-z0-9]{6}\.[a-z0-9]{16}`-示例`abcdef.0123456789abcdef` --token-ttl duration :令牌被自动删除之前的持续时间(例如1s、2m、3h),如果设置为 '0' ,则令牌将永不过期 --upload-certs : 将控制平面证书上传到 kubeadm-certs Secret。
简单示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 cat <<EOF > ./kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubernetesVersion: v${K8SVERSION} imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers controlPlaneEndpoint: "${APISERVER_NAME} :6443" networking: serviceSubnet: "10.99.0.0/16" podSubnet: "${POD_SUBNET} " dnsDomain: "cluster.local" EOF kubeadm init --config=kubeadm-config.yaml --upload-certs kubeadm init --apiserver-advertise-address=0.0.0.0 \ --apiserver-cert-extra-sans=127.0.0.1 \ --image-repository=registry.aliyuncs.com/google_containers \ --ignore-preflight-errors=all \ --kubernetes-version=v1.23.5 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16 \ --token-ttl=24h0m0s \ --control-plane-endpoint=192.168.2.175 \ --upload-certs sudo kubeadm init phase upload-certs --upload-certs sudo kubeadm init phase control-plane all --config=configfile.yaml sudo kubeadm init phase etcd local --config=configfile.yaml sudo kubeadm init --skip-phases=control-plane,etcd --config=configfile.yaml kubeadm init phase upload-certs --upload-certs --certificate-key=SOME_VALUE --config=SOME_YAML_FILE
token - 生成认证相关信息 命令参数: 1 2 3 4 5 6 7 8 9 create 创建服务器上的引导令牌 delete 删除服务器上的引导令牌 generate 生成并打印引导令牌,但不要在服务器上创建它 list 列出服务器上的引导令牌 --dry-run : 是否启用干运行模式(模拟) --print -join-command :create - 打印节点加入命令
基础实例: 1 2 3 4 5 6 7 8 9 10 11 12 kubeadm token create --print -join-command kubeadm token create $(kubeadm token generate) --print -join-command --ttl=0 kubeadm token list kubeadm token generate
config - 基础环境依赖配置 描述: 该命令可以显示或者打印集群初始化相关配置信息, 其次可以进行版本迁移,最后用于列举并拉取 kubeadm 所需的镜像。
命令参数:
images [list|pull] : 查看和拉取kubeadm初始化所需镜像。
1 2 3 4 5 6 7 --config string : kubeadm 配置文件的路径。 --image-repository string : 选择要从中拉取控制平面镜像的容器仓库 --kubernetes-version string : 选择一个特定的 Kubernetes 版本 -o, --experimental-output string 默认值:"text" , 可选 text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file --cri-socket string : 要连接的 CRI 套接字的路径, 仅当安装了多个CRI或具有非标准CRI插槽时,才使用此选项.
print : 打印集群Master初始化或者Node节点加入所提供的配置信息。
migrate : 允许将本地旧版本的配置对象转换为最新支持的版本,而无需变更集群中的任何内容。
基础实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 kubeadm config images list --image-repository mirrorgcrio --kubernetes-version=1.18.3 ..... kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=1.23.5 for i in $(kubeadm config images list --kubernetes-version=1.23.5 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers -v 5);do ctr -n k8s.io images pull ${i} done kubeadm config view $ kubectl get cm -o yaml -n kube-system kubeadm-config kubeadm config print init-defaults kubeadm config print join-defaults $ kubeadm config migrate --new-config 输出新配置文件 --old-config 读取旧初始化配置文件(必须) $ kubeadm config migrate --old-config=kubeadm-config-init.yml apiVersion: kubeadm.k8s.io/v1beta3 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: advertiseAddress: 10.10.107.225 bindPort: 6443 nodeRegistration: criSocket: /run/containerd/containerd.sock imagePullPolicy: IfNotPresent name: node taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta3 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: {} etcd: local : dataDir: /var/lib/etcd imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.23.5 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 scheduler: {}
join - 集群或者节点加入初始化 命令参数: 1 2 3 4 5 6 --control-plane : 控制面板地址 --certificate-key : 证书密钥 --discovery-token-ca-cert-hash : CA证书SHA256哈希值 --token : bootstrap 认证 token --cri-socket string : CRI套接字的路径, 当系统中存在非标准或者多个CRI套接字时使用该选项。 --config string :kubeadm 配置文件的路径
基础使用: 1 2 3 4 5 6 7 8 9 10 11 12 kubeadm join apiserver.test:6443 --token hzlzrr.uwuegx4locpu36oc \ --discovery-token-ca-cert-hash sha256:4cbe428cb3503277be9fbcf3a99de82a97397a624dd94d4270c4eed1b861f951 \ --control-plane --certificate-key 28b178f04afae3770aa92add0206650b2359dd61424f127a6d44142dd15a280d kubeadm join apiserver.test:6443 --token hzlzrr.uwuegx4locpu36oc \ --discovery-token-ca-cert-hash sha256:4cbe428cb3503277be9fbcf3a99de82a97397a624dd94d4270c4eed1b861f951 \ --cri-socket /run/containerd/containerd.sock kubeadm join --config node.yaml
reset - 节点重置操作 基础实例:
upgrade - 节点更新操作 描述: 使用此命令将集群顺利升级到新版本
基础语法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 kubeadm upgrade [flags] kubeadm upgrade [command ] apply:将Kubernetes集群升级到指定的版本 diff:显示将应用于现有静态pod清单的差异。另请参见: `kubeadm upgrade apply --dry-run` node:群集中节点的升级命令 plan:检查可升级到的版本,并验证当前集群是否可升级。要跳过internet检查,请传入可选的[version]参数 --add-dir-header If true , adds the file directory to the header of the log messages --log -file string If non-empty, use this log file --log -file-max-size uint Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800) --rootfs string [EXPERIMENTAL] The path to the 'real' host root filesystem. --skip-headers If true , avoid header prefixes in the log messages --skip-log-headers If true , avoid headers when opening log files -v, --v Level number for the log level verbosity
基础示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 kubeadm upgrade plan kubeadm upgrade apply v1.18.5 --config kubeadm-config.yaml kubeadm upgrade node --dry-run
0x02 Kubelet 命令 - 在集群中的每个节点上用来启动 pod 和容器等。
0x03 Kubectl 命令 - 用来与集群通信的命令行工具 描述:该命令实际上是操作 Kubernetes 对象(创建、修改、删除)的方法;https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
Kubectl 自动补全:1 2 3 4 5 6 7 8 9 10 11 12 source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrcecho "if [ $commands [kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrccat >> ~/.bashrc <<'END' alias k=kubectlcomplete -F __start_kubectl k END
使用案例:1 2 3 4 5 6 7 [root@master-01 ~]$ k get cs NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-2 Healthy {"health" :"true" } etcd-1 Healthy {"health" :"true" } etcd-0 Healthy {"health" :"true" }
api-versions - 当前可用集群支持的版本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 $ kubectl api-versions
api-resources - 获得支持资源的完整列表 描述:在必须指定要描述的资源类型的时候使用,注意可以看出资源对象是否支持名称空间。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 kubectl api-resources NAME SHORTNAMES APIGROUP NAMESPACED KIND bindings true Binding componentstatuses cs false ComponentStatus configmaps cm true ConfigMap endpoints ep true Endpoints events ev true Event limitranges limits true LimitRange namespaces ns false Namespace nodes no false Node persistentvolumeclaims pvc true PersistentVolumeClaim persistentvolumes pv false PersistentVolume pods po true Pod podtemplates true PodTemplate replicationcontrollers rc true ReplicationController resourcequotas quota true ResourceQuota secrets true Secret serviceaccounts sa true ServiceAccount services svc true Service mutatingwebhookconfigurations admissionregistration.k8s.io false MutatingWebhookConfiguration validatingwebhookconfigurations admissionregistration.k8s.io false ValidatingWebhookConfiguration customresourcedefinitions crd,crds apiextensions.k8s.io false CustomResourceDefinition apiservices apiregistration.k8s.io false APIService controllerrevisions apps true ControllerRevision daemonsets ds apps true DaemonSet deployments deploy apps true Deployment replicasets rs apps true ReplicaSet statefulsets sts apps true StatefulSet tokenreviews authentication.k8s.io false TokenReview localsubjectaccessreviews authorization.k8s.io true LocalSubjectAccessReview selfsubjectaccessreviews authorization.k8s.io false SelfSubjectAccessReview selfsubjectrulesreviews authorization.k8s.io false SelfSubjectRulesReview subjectaccessreviews authorization.k8s.io false SubjectAccessReview horizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscaler cronjobs cj batch true CronJob jobs batch true Jobcertificatesigningrequests csr certificates.k8s.io false CertificateSigningRequest leases coordination.k8s.io true Lease bgpconfigurations crd.projectcalico.org false BGPConfiguration bgppeers crd.projectcalico.org false BGPPeer blockaffinities crd.projectcalico.org false BlockAffinity clusterinformations crd.projectcalico.org false ClusterInformation felixconfigurations crd.projectcalico.org false FelixConfiguration globalnetworkpolicies crd.projectcalico.org false GlobalNetworkPolicy globalnetworksets crd.projectcalico.org false GlobalNetworkSet hostendpoints crd.projectcalico.org false HostEndpoint ipamblocks crd.projectcalico.org false IPAMBlock ipamconfigs crd.projectcalico.org false IPAMConfig ipamhandles crd.projectcalico.org false IPAMHandle ippools crd.projectcalico.org false IPPool networkpolicies crd.projectcalico.org true NetworkPolicy networksets crd.projectcalico.org true NetworkSet endpointslices discovery.k8s.io true EndpointSlice events ev events.k8s.io true Event ingresses ing extensions true Ingress ingressclasses networking.k8s.io false IngressClass ingresses ing networking.k8s.io true Ingress networkpolicies netpol networking.k8s.io true NetworkPolicy runtimeclasses node.k8s.io false RuntimeClass poddisruptionbudgets pdb policy true PodDisruptionBudget podsecuritypolicies psp policy false PodSecurityPolicy clusterrolebindings rbac.authorization.k8s.io false ClusterRoleBinding clusterroles rbac.authorization.k8s.io false ClusterRole rolebindings rbac.authorization.k8s.io true RoleBinding roles rbac.authorization.k8s.io true Role priorityclasses pc scheduling.k8s.io false PriorityClass csidrivers storage.k8s.io false CSIDriver csinodes storage.k8s.io false CSINode storageclasses sc storage.k8s.io false StorageClass volumeattachments storage.k8s.io false VolumeAttachment
apply - 当资源清单重新修改后采用此命令重新应用 基础示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 kubectl apply -f deployment.yaml kubectl apply -f https://weiyigeek.top/k8s/deployment.yaml kubectl apply -f nginx-deployment.yaml kubectl apply -f redis-master-service.yaml kubectl -n default create secret tls weiyigeek.top --cert=2023.weiyigeek.top.pem --key=2023.weiyigeek.top.key -o yaml --dry-run=client | kubectl apply -f - kubectl get sts -n app xk-manage -o yaml | sed -e "s#xk-manage:\S\{0,6\}-RELEASE-Prod#xk-manage:1.7.8-RELEASE-Prod#" | kubectl apply -f -
attach - 进入pod容器中进行交互式运行 1 2 3 4 ~$ kubectl attach load-generator -c load-generator -i -t If you don't see a command prompt, try pressing enter. / #
cluster-info - K8s 集群信息 示例1.集群相关信息包括 API-Server 地址 以及 KubeDNS 相关信息1 2 3 ~$ kubectl cluster-info
config - 集群上下文以及用户配置 常规示例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 kubectl config set -cluster k8s-cluster- --server=https://slb-vip.k8s:16443 --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true kubectl config delete-cluster k8s-cluster kubectl config set -context devops-ctx --cluster=k8s-cluster --user=devopsuser --namespace=devops kubectl config delete-context devops-ctx kubectl config set -credentials devopsuser --client-key=/etc/kubernetes/pki/user/devopsuser-key.pem --client-certificate=/etc/kubernetes/pki/user/devopsuser-key.pem --user=devopsuser --embed-certs=true kubectl config delete-user devopsuser kubectl config get-contexts kubectl config current-context kubectl config use-context devops-ctx
cp - 复制Pod中的文件到指定目录之中 示例1.从Pod中复制文件到本地1 2 kubectl cp weiyigeek/users-0:/usr/local /tomcat/logs /tmp/logs/ kubectl cp devops/test -28-1vw8p-vlr29-fxvqs:/home/jenkins/.ssh /tmp
create - 根据资源清单创建对应的Pod 基础示例 1 2 3 4 5 kubectl create -f nginx_pod.yaml kubectl create deployment java-demo --image=WeiyiGeek/java-demo --dry-run -o yaml > deploy.yaml
cordon - 节点限制加入资源 1 2 3 4 kubectl cordon node-1 node/node-1 cordoned
describe - 显示有关资源的详细信息 语法参数:1 kubectl describe 资源类型 资源名称
基础实例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 kubectl describe pod nginx-deployment-674ff86d-btmt4 kubectl describe deployment nginx-deployment kubectl describe node master-03
delete - 删除节点和资源 描述: 可以删除相关节点和资源对象,例如Pods 、Svc、Nodes、 Namespace、 Configmap、 Deployment、rs、rc、sts
等。
语法说明:kubectl delete [TYPE] Flags
示例演示:1 2 3 4 5 kubectl delete node k8s-master-1 kubectl -n kube-system delete Pods calico-xxxx
drain - 节点组件清理 基础示例: 1 2 3 4 5 6 7 8 9 10 11 12 kubectl drain master-02 --delete-local-data --force --ignore-daemonsets kubectl get nodes master-02 kubectl delete pod -n ingress-nginx --force --grace-period=0 ingress-nginx-controller-6b8bd48548-jmblv
exec - 在pod中的容器环境内执行命令(和命令docker exec 类似) 语法参数: 1 2 kubectl exec Pod名称 操作命令 kubectl exec -n 名称空间 -ti Pod名称 -c 容器名称 -- /bin/sh
基础示例: 1 2 3 4 5 6 7 kubectl exec -it nginx-deployment-674ff86d-btmt4 /bin/bash kubectl exec -n test -ti weiyigeek -c blog -- /bin/sh
expose - 将资源公开保留为新的SVC服务。 描述:按名称查找 deployment, service, replica set, replication controller or pod
,并使用该资源的选择器作为指定端口上新服务的选择器, 即创建新的服务。
温馨提示: 如果没有端口通过–port指定,并且公开的资源有多个端口,所有端口都将被新服务。此外如果未指定标签,新服务将重新使用它暴露的资源。
可能的资源包括(不区分大小写):pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs)
语法参数: 1 2 3 4 5 6 7 8 9 10 11 12 kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type =type ] [options] --name='' : 新创建的对象的名称。 --port='' : SVC 服务端口。 --target-port='' : Pod 容器端口。 --protocol='' : SVC 服务网络协议, 默认TCP。 --type ='' : 指定服务类型,可用范围`ClusterIP, NodePort, LoadBalancer, or ExternalName. Default is 'ClusterIP' `。
基础实例: 1 2 3 4 5 6 7 8 9 kubectl expose deployment nginx --name nginx-external --type =ClusterIP --port=80 --target-port=8000 kubectl expose service -n devtest nginx-web --name nginx-web-external --type =NodePort --port=80 --target-port=80 $ kubectl get svc -n devtest nginx-web-external
get - 显示资源列表 描述: 显示kubernetes相关资源对象信息,例如Pods 、Svc、Nodes、 Namespace、 Configmap、 Deployment、rs、rc、sts
相关资源信息。
基础语法 1 2 3 4 5 6 7 kubectl get 资源类型 -l -o --namespace --template
基础示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 kubectl get deployments kubectl get pods kubectl get pods --all-namespaces kubectl get pods -l app=nginx kubectl get pods -n kube-system -l "app.kubernetes.io/name=kubernetes-dashboard,app.kubernetes.io/instance=kubernetes-dashboard" -o jsonpath="{.items[0].metadata.name}" kubectl get pods --namespace kube-system -o jsonpath="{..image}" kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=redis kubectl get pods --all-namespaces -o jsonpath="{..image}" | tr -s '[[:space:]]' '\n' |sort | uniq -c kubectl get pod -n weiyigeek -l ref=info-student -o jsonpath="{.items[*].status.podIP}" | tr -s '[[:space:]]' '\n' > ip.txt for x in $(cat ip.txt);do echo -n "$x - " ;curl -v http://${x} :8080/ ;echo "" ;done kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' | uniq -c | sort -r kubectl get pods -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' | uniq -c | sort -r kubectl get pods redis-master-deployment-7d557b94bb-bzw2v -o jsonpath="{.spec.containers[*].image}" |tr -s '[[:space:]]' '\n' | uniq -c | sort -r kubectl get pods -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |sort kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}" kubectl get pods redis-master-deployment-7d557b94bb-bzw2v --template='{{(index (index .spec.containers 0).ports 0)}}{{"\n"}}' kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.namespace}{":\t"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.hostPath.path}{", "}{end}{end}' | sort kubectl get nodes kubectl get nodes -o wide kubectl get deployments -A kubectl get deployments -n kube-system kubectl get services -o wide kubectl get svc -o wide kubectl get cm kubeadm-config -n kube-system -o yaml kubectl get ep kube-controller-manager -n kube-system -o yaml kubectl get rs
补充说明: 示例.以YAML的格式显示 k8s 中 kubeadm-config 的配置;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 ~$ kubectl get cm -o yaml -n kube-system kubeadm-config apiVersion: v1 data: ClusterConfiguration: | apiServer: extraArgs: authorization-mode: Node,RBAC timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controlPlaneEndpoint: weiyigeek.k8s:6443 controllerManager: {} dns: type : CoreDNS etcd: local : dataDir: /var/lib/etcd imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers kind: ClusterConfiguration kubernetesVersion: v1.19.3 networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 serviceSubnet: 10.100.0.0/12 scheduler: {} ClusterStatus: | apiEndpoints: ubuntu: advertiseAddress: 10.10.107.202 bindPort: 6443 apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterStatus kind: ConfigMap metadata: creationTimestamp: "2020-11-04T13:30:06Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:ClusterConfiguration: {} f:ClusterStatus: {} manager: kubeadm operation: Update time: "2020-11-04T13:30:06Z" name: kubeadm-config namespace: kube-system resourceVersion: "162" selfLink: /api/v1/namespaces/kube-system/configmaps/kubeadm-config uid: ee701525-7242-42b3-bc64-6c7ac27dd5d3
注意事项:
logs - 查看pod中的容器的打印日志(和命令docker logs 类似) 描述:输出pod中一个容器的日志,如果pod只包含一个容器则可以省略容器名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 -c, --container="" : 容器名。 -f, --follow[=false ]: 指定是否持续输出日志。 --interactive[=true ]: 如果为true ,当需要时提示用户进行输入。默认为true 。 --limit -bytes=0: 输出日志的最大字节数。默认无限制。 -p, --previous[=false ]: 如果为true ,输出pod中曾经运行过,但目前已终止的容器的日志。 --since=0: 仅返回相对时间范围,如5s、2m或3h,之内的日志。默认返回所有日志。只能同时使用since和since-time中的一种。 --since-time="" : 仅返回指定时间(RFC3339格式)之后的日志。默认返回所有日志。只能同时使用since和since-time中的一种。 --tail=-1: 要显示的最新的日志条数。默认为-1,显示所有的日志。 --timestamps[=false ]: 在日志中包含时间戳。 kubectl logs -f nginx-deployment-674ff86d-btmt4 $ kubectl logs -p -c ruby web-1 $ kubectl logs -f -c ruby web-1 $ kubectl logs --tail=20 nginx $ kubectl logs --since=1h nginx $ kubectl logs Blog -n WeiyiGeek --since-time="2021-12-23T20:20:59Z" --limit -bytes=1024
run - 运行一个pod应用 基础示例:1 2 3 4 5 kubectl run helloworld --image=hello-world pod/helloworld created
replace - 用文件名或stdin替换资源 描述: 该命令支持JSON和YAML格式,可以帮助我们快速更换现有资源。
语法参数: 1 2 3 -f, --filename=[]: 指定格式的资源文件。 --force=false : 强制删除资源。 --wait =false : 如果为真,等待资源消失后再返回。
基础实例: 1 2 3 4 5 6 7 8 9 10 11 12 kubectl replace -f ./pod.json kubectl replace -f ./deployment.yaml cat pod.json | kubectl replace -f - kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - kubectl replace --force -f ./pod.json
port-forward - 使用资源的名称来进行本地端口转发pod 描述: 将一个或多个本地端口转发到pod, 此命令要求节点安装 socat, 使用资源类型/名称(如deployment/mydeployment)
来选择pod, 如果省略资源类型默认为“pod”。
适用范围 Pod(缺省)、Service、RC、deployment。
Tips : 转发会话结束当选定的pod终止时,需要重新运行命令才能恢复转发。
语法参数: 1 2 3 4 5 6 kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] --address=[localhost] --pod-running-timeout=1m0s:
基础实例: 1 2 3 4 5 6 7 8 9 10 11 kubectl port-forward pod/mypod :5000 kubectl port-forward service/myservice 8443:https kubectl port-forward --address 127.0.0.1,10.10.107.191 pod/redis-master-7d557b94bb-bzw2v 7000:6379
label - 节点、资源标签更新与设置 描述: 更新资源的标签信息,我们可以根据标签来设置Pod与节点亲和性。
1 2 3 4 5 6 ~$ kubectl label node weiyigeek-223 node-role.kubernetes.io/work=test node/weiyigeek-223 labeled kubectl label node weiyigeek-223 node-role.kubernetes.io/work
top - 集群相关Metrics资源数据查看(类比于Linux下的Top) 1 2 3 ~$ kubectl top node error: Metrics API not available
scale - 动态更新副本数 描述: 为部署、副本集、复制控制器或有状态集设置新大小。
1 kubectl -n app scale statefulset/xk-student --replicas=0
set - 配置应用程序资源 命令参数 1 2 3 4 5 6 7 8 9 kubectl set SUBCOMMAND [options] env 更新模板环境变量 image 更新模板镜像地址 resources 在对象的 pod templates 上更新资源的 requests/limits selector 设置 resource 的 selector serviceaccount 更新资源服务账户 subject 更新角色绑定或群集角色绑定中的用户、组或服务帐户
使用案例 1 2 3 4 5 6 7 8 9 10 11 kubectl set image deployment/nginx busybox=busybox:latest nginx=nginx:1.21.0 kubectl set image deployments,rc nginx=nginx:1.9.1 --all kubectl set image daemonset abc *=nginx:1.9.1 kubectl set image statefulset/test -zk init-jar=harbor.weiyigeek.top/devops/zk:2.1.0-Test -n app
wait - 等待一个或多个资源的特定条件(实验性) 描述: 该命令会占用多个资源,通过使用–for标志等待在每个给定对象的状态字段中看到指定的条件资源,并将向标准输出一条成功消息,指示何时满足指定条件,同时可以使用-o选项更改为输出目标。
格式化输出文件类型: 1 2 -o, --output='' : Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file.
简单示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 kubectl wait --namespace ingress-nginx \ --for =condition=ready pod \ --selector=app.kubernetes.io/component=controller \ --timeout=120s kubectl wait pod --namespace devtest \ --for =condition=Ready \ --selector=app=oa \ --timeout=120s kubectl wait --for =condition=Ready pod/busybox1 kubectl wait --for =condition=Ready=false pod/busybox1 kubectl wait --for =jsonpath='{.status.phase}' =Running pod/busybox1 kubectl delete pod/busybox1 kubectl wait --for =delete pod/busybox1 --timeout=60s
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 #查看当前更新状态 kubectl rollout status deployments nginx-deployment kubectl get pods #查看可回滚的历史版本 kubectl rollout history deployment/nginx-deployment kubectl rollout undo deployment/nginx-deployment ##可以使用--revision参数指定回退到某个历史版本 kubectl rollout undo deployment/nginx-deployment --to-revision=2 ##暂停 deployment的更新 kubectl rollout pause deployment/nginx-deployment $ kubectl get ep -o wide NAME ENDPOINTS AGE deploy-blog-svc 10.244.0.209:80,10.244.1.196:80,10.244.2.99:80 34d deploy-maven-svc 10.244.0.236:8080,10.244.1.221:8080,10.244.2.124:8080 32d kubernetes 10.10.107.202:6443 83d # 在Kubenates的上创建devops命名空间,用于Jenkins使用 kubectl create namespace devops # 在Kubernetes上为Jenkins构建创建有Cluster Admin权限的Service Account jenkins: kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=devops:jenkins Tips : 创建Deployment控制器控制的资源,实际上不加port也能通过服务进行发现实际工作中一定要加上为了后期问题的排查 Tips : 可以采用直接 RUN 创建Pod, 实际上不加port也能通过服务进行发现实际工作中一定要加上为了后期问题的排查 kubectl run nginx --image nginx:latest --port=80 --replicas=2 ~$ kubectl get clusterroles system:aggregate-to-admin -o yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" creationTimestamp: "2021-01-11T04:55:10Z" labels: kubernetes.io/bootstrapping: rbac-defaults rbac.authorization.k8s.io/aggregate-to-admin: "true" managedFields: - apiVersion: rbac.authorization.k8s.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:rbac.authorization.kubernetes.io/autoupdate: {} f:labels: .: {} f:kubernetes.io/bootstrapping: {} f:rbac.authorization.k8s.io/aggregate-to-admin: {} f:rules: {} manager: kube-apiserver operation: Update time: "2021-01-11T04:55:10Z" name: system:aggregate-to-admin resourceVersion: "50" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/system%3Aaggregate-to-admin uid: 93f094d8-f5f6-42c6-bcc8-e6ca9bb0f37a rules: - apiGroups: - authorization.k8s.io resources: - localsubjectaccessreviews verbs: - create - apiGroups: - rbac.authorization.k8s.io resources: - rolebindings - roles verbs: - create - delete - deletecollection - get - list - patch - update - watch
参考地址: https://www.cnblogs.com/shunzi115/p/12392056.html