0x03 Kubectl 命令 - 用来与集群通信的命令行工具 描述:该命令实际上是操作 Kubernetes 对象(创建、修改、删除)的方法;
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
Kubectl 自动补全:
# 自动补全
source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包
# 在您的 bash shell 中永久的添加自动补全
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 在您的 zsh shell 中永久的添加自动补全
echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc
#加入到启动配置文件中为 kubectl 使用一个速记别名该别名也可以与 completion 一起使用;
cat >> ~/.bashrc <<'END'
alias k=kubectl
complete -F __start_kubectl k
END 使用案例:
[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 - 当前可用集群支持的版本 $ kubectl api-versions
# admissionregistration.k8s.io/v1
# admissionregistration.k8s.io/v1beta1
# apiextensions.k8s.io/v1
# apiextensions.k8s.io/v1beta1
# apiregistration.k8s.io/v1
# apiregistration.k8s.io/v1beta1
# apps/v1
# authentication.k8s.io/v1
# authentication.k8s.io/v1beta1
# authorization.k8s.io/v1
# authorization.k8s.io/v1beta1
# autoscaling/v1
# autoscaling/v2beta1
# autoscaling/v2beta2
# batch/v1
# batch/v1beta1
# certificates.k8s.io/v1beta1
# coordination.k8s.io/v1
# coordination.k8s.io/v1beta1
# crd.projectcalico.org/v1
# discovery.k8s.io/v1beta1
# events.k8s.io/v1beta1
# extensions/v1beta1
# networking.k8s.io/v1
# networking.k8s.io/v1beta1
# node.k8s.io/v1beta1
# policy/v1beta1
# rbac.authorization.k8s.io/v1
# rbac.authorization.k8s.io/v1beta1
# scheduling.k8s.io/v1
# scheduling.k8s.io/v1beta1
# storage.k8s.io/v1
# storage.k8s.io/v1beta1
# v1 api-resources - 获得支持资源的完整列表 描述:在必须指定要描述的资源类型的时候使用,注意可以看出资源对象是否支持名称空间。
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
controllerreVisio ns 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 Job
certificatesigningrequests 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.使用 kube apply 命令可以创建该 .yaml 文件中的 Deployment 对象
kubectl apply -f deployment.yaml
kubectl apply -f https://weiyigeek.top/k8s/deployment.yaml
# 2.执行deployment/services操作的部署命令
kubectl apply -f nginx -deployment.yaml
# deployment.apps/nginx-deployment created
kubectl apply -f redis -master-service.yaml
# service/redis-master-service created attach - 进入pod容器中进行交互式运行 # 示例1.在pod运行时使用命令以下命令继续在Pod子容器中进行交互式运行
~$ 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 相关信息
~$ kubectl cluster-info
# Kubernetes master is running at https://weiyigeek-lb-vip.k8s:16443
# KubeDNS is running at https://weiyigeek-lb-vip.k8s:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy config - 集群上下文以及用户配置 常规示例:
# 设置外部集群 && 删除外部集群
kubectl config set-cluster k8s-cluster- --server=https://slb-vip.k8s:16443 --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
# Cluster "k8s-cluster" set.
kubectl config delete-cluster k8s-cluster
# deleted cluster k8s-cluster from /root/.kube/config
# 设置上下文 && 删除上下文
kubectl config set-context devops-ctx --cluster=k8s-cluster --user=devopsuser --namespace=devops
# Context "devops-ctx " created.
kubectl config delete-context devops-ctx
# deleted context devops-ctx from /root/.kube/config
# 设置用户 && 删除用户
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
# User "devopsuser" set.
kubectl config delete-user devopsuser
# deleted user devopsuser from /root/.kube/config
# 获取全局上下文
kubectl config get-contexts
# 获取当前上下文
kubectl config current-context
# 切换指定上下文
kubectl config use-context devops-ctx cp - 复制Pod中的文件到指定目录之中 示例1.从Pod中复制文件到本地
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.资源清单来创建 pod
kubectl create -f nginx_pod.yaml
# 示例2.根据命令行生成一个 `deployment` 资源清单
kubectl create deployment java-demo --image=WeiyiGeek/java-demo --dry-run -o yaml > deploy.yaml cordon - 节点限制加入资源 # kubectl cordon [节点名称]
# (1) 禁止新建立的Pod在该节点上运行
kubectl cordon node-1
node/node-1 cordoned describe - 显示有关资源的详细信息 语法参数:
kubectl describe 资源类型 资源名称 基础实例:
#1.查看名称为nginx-deployment-674ff86d-btmt4的Pod的信息
kubectl describe pod nginx-deployment-674ff86d-btmt4
# Name: nginx-deployment-674ff86d-btmt4
# Namespace: default
# Priority: 0
# Node: node/10.10.107.192
# Start Time: Thu, 07 May 2020 14:12:18 +0800
# Labels: app=nginx
# pod-template-hash=674ff86d
# Annotations: cni.projectcalico.org/podIP: 10.100.167.129/32
# cni.projectcalico.org/podIPs: 10.100.167.129/32
# Status: Running
# IP: 10.100.167.129
# IPs:
# IP: 10.100.167.129
# Controlled By: ReplicaSet/nginx-deployment-674ff86d
#2.查看名称为nginx-deployment的Deployment的信息
kubectl describe deployment nginx-deployment
# Name: nginx-deployment
# Namespace: default
# CreationTimestamp: Thu, 07 May 2020 14:12:18 +0800
# Labels: app=nginx
# Annotations: deployment.kubernetes.io/revision: 1
# Selector: app=nginx
# Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
# ...
# Conditions:
# Type Status Reason
# ---- ------ ------
# Available True MinimumReplicasAvailable
# Progressing True NewReplicaSetAvailable
# OldReplicaSets: <none>
# NewReplicaSet: nginx-deployment-674ff86d (1/1 replicas created)
# Events: <none>
#3.查看节点各项信息
kubectl describe node master-03
# Name: master-03
# Roles: master
# Labels: beta.kubernetes.io/arch=amd64
# beta.kubernetes.io/os=linux
# kubernetes.io/arch=amd64
# kubernetes.io/hostname=master-03
# kubernetes.io/os=linux
# node-role.kubernetes.io/master=
# Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/docker shim.sock
# node.alpha.kubernetes.io/ttl: 0
# projectcalico.org/IPv4Address: 10.10.107.193/24
# projectcalico.org/IPv4IPIPTunnelAddr: 10.100.133.128
# volumes.kubernetes.io/controller-managed-attach-detach: true delete - 删除节点和资源 描述: 可以删除相关节点和资源对象,例如Pods 、Svc、Nodes、 Namespace、 Configmap、 Deployment、rs、rc、sts等。
语法说明:kubectl delete [TYPE] Flags
示例演示:
# 1.在Master节点上删除指定的节点。
kubectl delete node k8s-master-1
# 2.指定kube-system名称空间删除其Pods。
kubectl -n kube-system delete Pods calico-xxxx drain - 节点组件清理 基础示例:
# 示例1.强制删除节点本地数据以及运行的容器
kubectl drain master-02 --delete-local-data --force --ignore-daemonsets
# WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-amd64-mlcvm, kube-system/kube-proxy-f7rnh
# evicting pod kube-system/coredns-5fd54d7f56-22fwz
# bec pod/coredns-5fd54d7f56-22fwz evicted
# node/server4 evicted
kubectl get nodes master-02
# NAME STATUS ROLES AGE VERSION
# master-02 Ready,SchedulingDisabled <none> 3h36m v1.18.3 # 不再调用此结点
# 示例2.强制删除处于terminal状态或者异常状态的Pod,等待时间为0
kubectl delete pod -n ingress-nginx --force --grace-period=0 ingress-nginx-controller-6b8bd48548-jmblv exec - 在pod中的容器环境内执行命令(和命令docker exec 类似) 语法参数:
kubectl exec Pod名称 操作命令
kubectl exec -n 名称空间 -ti Pod名称 -c 容器名称 -- /bin/sh 基础示例:
# (1) 在名称为 nginx-pod-xxxxxx 的Pod中运行bash。
kubectl exec -it nginx-deployment-674ff86d-btmt4 /bin/bash
# kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
# root@nginx-deployment-674ff86d-btmt4:/#
# (2) 进入Pod多个容器中的其中一个容器,例如进入名称为 weiyigeek 的Pod中的blog容器。
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)
语法参数:
# 语法
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.为 nginx 部署创建一个服务名为nginx-external ,该部署服务于端口80并连接到Pod容器的8080端口
kubectl expose deployment nginx --name nginx-external --type=ClusterIP --port=80 --target-port=8000
# 2.为 nginx-web 服务创建一个别名服务 nginx-web-external , 其类型为NodePort,注意此处我随机端口。
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
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# nginx-web-external NodePort 10.102.35.45 <none> 80:30230/TCP 70s get - 显示资源列表 描述: 显示kubernetes相关资源对象信息,例如Pods 、Svc、Nodes、 Namespace、 Configmap、 Deployment、rs、rc、sts相关资源信息。
基础语法
# 语法
kubectl get 资源类型
# 参数
-l #获取相关label标签的资源列表
-o #以 wide,yaml,jsonpath="{..image}",go-template 格式化输出
--namespace #查找指定名称空间下的 Pod
--template #使用 go-template 格式化 基础示例
# 1.获取类型为Deployment的资源列表
kubectl get deployments
# NAME READY UP-TO-DATE AVAILABLE AGE
# nginx-deployment 1/1 1 1 8h
# 2.获取类型为Pod的资源列表
kubectl get pods # 默认显示名称为default的pod列表
kubectl get pods --all-namespaces #执行命令,获取所有名称空间中的所有 Pod
# NAME READY STATUS RESTARTS AGE
# nginx-deployment-674ff86d-btmt4 1/1 Running 0 8h
kubectl get pods -l app=nginx # 获取相关label标签的资源列表
# NAME READY STATUS RESTARTS AGE
# nginx-deployment-cc7df4f8f-2jlnp 1/1 Running 0 47m
# nginx-deployment-cc7df4f8f-jxwrs 1/1 Running 0 47m
# 采用jsonpath过滤语法获取符合条件得得Pod名称
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}" # kubernetes-dashboard-879457794-kxvcr
# 使用 -o jsonpath={..image} 参数,输出结果将格式化为只包含容器镜像名字的形式
kubectl get pods --namespace kube-system -o jsonpath="{..image}" # 按名称空间查找容器
kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=redis # redis redis:latest
kubectl get pods --all-namespaces -o jsonpath="{..image}" | tr -s '[[:space:]]' '
' |sort | uniq -c # jsonpath 将空格替换为新的行并对对结果排序,然后进行计数
# 24 calico/cni:v3.13.1
# 2 calico/kube-controllers:v3.13.1
# 12 calico/node:v3.13.1
# 12 calico/pod2daemon-flexvol:v3.13.1
# 4 mirrorgcrio/coredns:1.6.7
# 6 mirrorgcrio/etcd:3.4.3-0
# 6 mirrorgcrio/kube-apiserver:v1.18.4
# 6 mirrorgcrio/kube-controller-manager:v1.18.4
# 12 mirrorgcrio/kube-proxy:v1.18.4
# 6 mirrorgcrio/kube-scheduler:v1.18.4
# 1 redis
# 1 redis:latest
kubectl get pod -n weiyigeek -l ref=info-student -o jsonpath="{.items[*].status.podIP}" | tr -s '[[:space:]]' '
' > ip.txt
for x in $(cat ip.txt);do echo -n "$x - ";curl -v http://${x}:8080/ ;echo "";done
#用 Pod 中 image 字段的绝对路径来查找容器的镜像名字,可以规避 image 字段重复出现的情况。
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '
' | uniq -c | sort -r
# .items[*]:每一个返回值
# .spec: 获取 spec
# .containers[*]: 每一个 container
# .image:获取 image
kubectl get pods -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '
' | uniq -c | sort -r
# 1 redis
# 如果通过名字查找 Pod由于返回结果只有一个 Pod,此时,.items[*] 这一部分应该从 jsonpath 中移除(效果同上)
kubectl get pods redis-master-deployment-7d557b94bb-bzw2v -o jsonpath="{.spec.containers[*].image}" |tr -s '[[:space:]]' '
' | uniq -c | sort -r
# 1 redis
# map[containerPort:6379 protocol:TCP]
# 按Pod查找容器输出结果可以通过 rannge 操作遍历(值得学习分隔)
kubectl get pods -o=jsonpath='{range .items[*]}{"
"}{.metadata.name}{": "}{range .spec.containers[*]}{.image}{", "}{end}{end}' |sort
# redis-master-deployment-7d557b94bb-bzw2v: redis,
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)}}{{"
"}}' ##使用go-template罗列容器进行Json解析
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"
"}{.metadata.namespace}{": "}{.metadata.name}{": "}{range .spec.volumes[*]}{.hostPath.path}{", "}{end}{end}' | sort
# 3.获取类型为Node的资源列表
kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# k8s Ready master 29h v1.18.2
kubectl get nodes -o wide
# NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
# ks8test Ready master 23h v1.18.3 10.10.107.193 <none> CentOS Linux 7 (Core) 5.7.0-1.el7.elrepo.x86_64 docker://19.3.9
# node-1 Ready <none> 41m v1.18.3 10.20.172.82 <none> CentOS Linux 7 (Core) 5.7.0-1.el7.elrepo.x86_64 docker://19.3.9
# 4.名称空间在命令后增加 -A 或 --all-namespaces 可查看所有 名称空间中 的对象,使用参数 -n 可查看指定名称空间的对象,
# 查看所有名称空间的 Deployment
kubectl get deployments -A # --all-namespaces
# 查看 kube-system 名称空间的 Deployment
kubectl get deployments -n kube-system
# NAME READY UP-TO-DATE AVAILABLE AGE
# calico-kube-controllers 1/1 1 1 29h
# coredns 2/2 2 2 29h
# 5.Services抽象层查看
kubectl get services -o wide
kubectl get svc -o wide
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
# kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 40h <none>
# redis-master-service ClusterIP 10.99.192.159 <none> 6379/TCP 8m24s app=redis,role=master,tier=backend
# 6.指定名称空间的配置信息查看
kubectl get cm kubeadm-config -n kube-system -o yaml
# apiVersion: v1
# data:
# ClusterConfiguration: |
# apiServer:
# extraArgs:
# authorization-mode: Node,RBAC
# timeoutForControlPlane: 4m0s
# apiVersion: kubeadm.k8s.io/v1beta2
# 7.指定名称空间选举信息查看
kubectl get ep kube-controller-manager -n kube-system -o yaml
# apiVersion: v1
# kind: Endpoints
# metadata:
# annotations:
# control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"master-01_137ddc1b-55bf-413b-81d3-f76654daa41e","leaseDurationSeconds":15,"acquireTime":"2020-06-24T03:51:16Z","renewTime":"2020-06-28T07:56:52Z","leaderTransitions":6}'
# creationTimestamp: "2020-06-23T04:45:29Z"
# 8.查看 ReplicaSet(副本) 状态与信息
kubectl get rs
# NAME DESIRED CURRENT READY AGE
# redis-master-deployment-7d557b94bb 1 1 1 4m46s 补充说明:
示例.以YAML的格式显示 k8s 中 kubeadm-config 的配置;
~$ 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只包含一个容器则可以省略容器名。
# kubectl logs [Pod名称]
-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]: 在日志中包含时间戳。
#查看名称为nginx-pod-XXXXXXX的Pod内的容器打印的日志
#本案例中的 nginx-pod 没有输出日志,所以您看到的结果是空的
kubectl logs -f nginx-deployment-674ff86d-btmt4
# 返回pod ruby中已经停止的容器web-1的日志快照
$ kubectl logs -p -c ruby web-1
# 持续输出pod ruby中的容器web-1的日志
$ kubectl logs -f -c ruby web-1
# 仅输出pod nginx中最近的20条日志
$ kubectl logs --tail=20 nginx
# 输出pod nginx中最近一小时内产生的所有日志
$ kubectl logs --since=1h nginx
# 输出命名空间为WeiyiGeek,pods为Blog的日志仅返回指定时间(RFC3339格式)之后的日志并且仅仅输出1024bytes
# 注意, 北京时间需要+8小时
$ kubectl logs Blog -n WeiyiGeek --since-time="2021-12-23T20:20:59Z" --limit-bytes=1024 run - 运行一个pod应用 基础示例:
# 示例1.这是一种自主式的pod建立方式,还有一种deployment控制器方式;
kubectl run helloworld --image=hello-world
pod/helloworld created
# 查看执行的结果日志
# kubectl logs helloworld replace - 用文件名或stdin替换资源 描述: 该命令支持JSON和YAML格式,可以帮助我们快速更换现有资源。
语法参数:
-f, --filename=[]: 指定格式的资源文件。
--force=false: 强制删除资源。
--wait=false: 如果为真,等待资源消失后再返回。 基础实例:
# 1.使用json或者yaml格式,替换现有资源。
kubectl replace -f ./pod.json
kubectl replace -f ./deployment.yaml
# 2.根据传递给stdin的JSON替换一个pod
cat pod.json | kubectl replace -f -
# 3.将单个容器吊舱的图像版本(标签)更新为v4
kubectl get pod mypod -o yaml | sed 's/(image: myimage):.*$/1:v4/' | kubectl replace -f -
# 4.强制替换、删除,然后重新创建资源
kubectl replace --force -f ./pod.json port-forward - 使用资源的名称来进行本地端口转发pod 描述: 将一个或多个本地端口转发到pod, 此命令要求节点安装 socat, 使用资源类型/名称(如deployment/mydeployment)来选择pod, 如果省略资源类型默认为“pod”。
适用范围 Pod(缺省)、Service、RC、deployment。
Tips : 转发会话结束当选定的pod终止时,需要重新运行命令才能恢复转发。
语法参数:
# 语法
kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]
# 参数
--address=[localhost] # 要监听的地址(逗号分隔)。
--pod-running-timeout=1m0s: # 等待时间的长度(如5s, 2m,或3h,大于零) 基础实例:
# - (0) 在本地的随机端口上侦听,转发到pod中的5000
kubectl port-forward pod/mypod :5000
# - (1) 本地侦听端口 8443 转发到服务选择的pod中名为“https”的服务端口的targetPort
kubectl port-forward service/myservice 8443:https
# - (2) 映射 redis-master-7d557b94bb-bzw2v Pod 的 6379 到 127.0.0.1,10.10.107.191 接口的7000
kubectl port-forward --address 127.0.0.1,10.10.107.191 pod/redis-master-7d557b94bb-bzw2v 7000:6379
# Forwarding from 10.10.107.191:7000 -> 6379
# Forwarding from 127.0.0.1:7000 -> 6379
# Handling connection for 7000 label - 节点、资源标签更新与设置 描述: 更新资源的标签信息,我们可以根据标签来设置Pod与节点亲和性。
# 节点角色名称设置
~$ 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) 没有安装 Kubernerters-Metrics-Server 的时候将会显示以下错误;
~$ kubectl top node
error: Metrics API not available scale - 动态更新副本数 描述: 为部署、副本集、复制控制器或有状态集设置新大小。
kubectl -n app scale statefulset/xk-student --replicas=0 set - 配置应用程序资源 命令参数
# Usage:
kubectl set SUBCOMMAND [options]
# Available Commands:
env 更新模板环境变量
image 更新模板镜像地址
resources 在对象的 pod templates 上更新资源的 requests/limits
selector 设置 resource 的 selector
serviceaccount 更新资源服务账户
subject 更新角色绑定或群集角色绑定中的用户、组或服务帐户 使用案例
# 1.设置deployment控制器管理的nginx资源,将nginx容器的镜像换成1.21.0
kubectl set image deployment/nginx busybox=busybox:latest nginx=nginx:1.21.0
# 2.将所有deployment和rc的nginx容器映像更新为“nginx:1.9.1”
kubectl set image deployments,rc nginx=nginx:1.9.1 --all
# 3.将守护程序abc的所有容器的映像更新为“nginx:1.9.1”
kubectl set image daemonset abc *=nginx:1.9.1 wait - 等待一个或多个资源的特定条件(实验性) 描述: 该命令会占用多个资源,通过使用–for标志等待在每个给定对象的状态字段中看到指定的条件资源,并将向标准输出一条成功消息,指示何时满足指定条件,同时可以使用-o选项更改为输出目标。
格式化输出文件类型:
-o, --output='': Output format. One of:
json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file. 简单示例:
# 1.等待Ingress相关资源Pod状态为Ready,使用标签选择器,超时实践为120
kubectl wait --namespace ingress-nginx
--for=condition=ready pod
--selector=app.kubernetes.io/component=controller
--timeout=120s
# pod/ingress-nginx-controller-847949b9d7-9fzrj condition met
kubectl wait pod --namespace devtest
--for=condition=Ready
--selector=app=oa
--timeout=120s
# 2.等待pod“busybox1”包含类型为“Ready”的状态条件
kubectl wait --for=condition=Ready pod/busybox1
# 3.状态条件的默认值为true,可以将其设置为false
kubectl wait --for=condition=Ready=false pod/busybox1
# 4.等待pod“busybox1”包含“正在运行”的状态阶段。
kubectl wait --for=jsonpath='{.status.phase}'=Running pod/busybox1
# 发出“删除”命令后,等待pod“busybox1”被删除,超时60秒
kubectl delete pod/busybox1
kubectl wait --for=delete pod/busybox1 --timeout=60s #查看当前更新状态
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