kubectl命令行大全

#查看kube-system namespace下面的pod/svc/deployment 等等(-o wide  选项可以查看存在哪个对应的节点)
kubectl get pod/svc/deployment -n kube-system
kubectl get all -n kube-system

#查看pod 日志 (如果pod有多个容器需要加-c 容器名)
kubectl logs xxx -n kube-system  
kubectl logs -f -l component=controller --all-containers -n kube-system 


#进入容器
kubectl exec -it nginx-56b8c64cb4-t97vb -- /bin/bash #pod里面只有一个容器
kubectl exec -it my-pod --container main-app -- /bin/bash #pod里面只有多个容器

#根据label删除:
kubectl delete pod -l app=flannel -n kube-system
 
#扩容
kubectl scale deployment spark-worker-deployment --replicas=8

#重启
kubectl rollout restart -n skywalking deployment skywalking-oap

#查看pod重启前的日志
kubectl logs --tail=100 frontend-65c58c957d-bzbg2 --previous

#事件查询
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl get events --field-selector type=Warning
kubectl get events --field-selector involvedObject.kind=Node

#导出配置文件:
  导出proxy
  kubectl get ds -n kube-system -l k8s-app=kube-proxy -o yaml>kube-proxy-ds.yaml
  
  导出kube-dns
  kubectl get deployment -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns-dp.yaml
  kubectl get services -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns-services.yaml
  
  导出所有 configmap
  kubectl get configmap -n kube-system -o wide -o yaml > configmap.yaml
  
#删除kube-system 下Evicted状态的所有pod:
kubectl get pods -n kube-system |grep Evicted| awk '{print $1}'|xargs kubectl delete pod  -n kube-system

#修改启动参数
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 查看集群信息
kubectl cluster-info

# 查看各组件信息
kubectl get componentstatuses
#v1.16
kubectl get cs -o=go-template='{{printf "NAME\t\t\tHEALTH_STATUS\tMESSAGE\t\n"}}{{range .items}}{{$name := .metadata.name}}{{range .conditions}}{{printf "%-24s%-16s%-20s\n" $name .status .message}}{{end}}{{end}}'

# 获取web登录密码
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

#查看kubelet进程启动参数
ps -ef | grep kubelet

#查看权限
kubectl get clusterrole cs:admin -o yaml

#用户授权
kubectl create clusterrolebinding system:kube-proxy --clusterrole=cluster-admin --user=system:kube-proxy

#查看日志:
journalctl -u kubelet -f #追踪
journalctl -l -u kubelet #查询

#设为不可调度状态:
kubectl cordon node1

#将pod赶到其他节点:
kubectl drain node1

#解除不可调度状态
kubectl uncordon node1

# 每隔30分钟清理一次处于特殊状态(Terminating)的pods。
*/30 * * * * /k8s/kubernetes/bin/kubectl get pod --all-namespaces | awk '{if($4=="Terminating"){system("/k8s/kubernetes/bin/kubectl delete pod -n "$1" "$2" --grace-period=0 --force")}}' 

# 每隔10分钟清理一次处于特殊状态(Evicted)的pods。
*/10 * * * * /k8s/kubernetes/bin/kubectl get pod --all-namespaces | awk '{if($4=="Evicted"){system("/k8s/kubernetes/bin/kubectl delete pod -n "$1" "$2" --grace-period=0 --force")}}' 

kubectl批处理

# 统一设置副本数
kubectl get deployments --all-namespaces |grep -vE "^auth-center|^apollo|^ops-monit|^kube-|^default"|while read line; do ns=`echo $line|awk '{print $1}'`; dp=`echo $line|awk '{print $2}'`; kubectl scale --replicas=1 deploy/$dp -n $ns; done

# 统一设置需求CPU
kubectl get deployments --all-namespaces |grep -vE "^auth-center|^apollo|^ops-monit|^kube-|^default"|while read line
do
  ns=`echo $line|awk '{print $1}'`
  dp=`echo $line|awk '{print $2}'`
  con=`echo $dp|sed 's/deploy-//g'`
  kubectl patch deployment $dp -n $ns --patch "{\"spec\": {\"template\": {\"spec\": {\"containers\": [{\"name\": \"$con\",\"resources\": {\"requests\": {\"cpu\":\"50m\"}}}]}}}}"
 done
 
 # 统一加环境变量
  kubectl get deployments --all-namespaces |grep -vE "^auth-center|^apollo|^ops-monit|^kube-|^default|^infra|^cis|^terminal|^mdm"|while read line
do
  ns=`echo $line|awk '{print $1}'`
  dp=`echo $line|awk '{print $2}'`
  con=`echo $dp|sed 's/deploy-//g'`
  kubectl patch deployment $dp -n $ns --patch "{\"spec\": {\"template\": {\"spec\": {\"containers\": [{\"name\": \"$con\",\"env\": [{\"name\":\"JAVA_TOOL_OPTIONS\",\"value\":\"-javaagent:/opt/agents/apm-javaagent/apm-javaagent.jar=appName=$con\"}]}]}}}}"
 done
 
# 获取deployment的镜像
kubectl get deployments --all-namespaces -o jsonpath="{range .items[*]}{.metadata.namespace}{'@'}{.metadata.name}{'@'}{.spec.template.spec.containers[0].name}{'@'}{.spec.template.spec.containers[0].image}{'\n'}{end}"

# 获取pod异常的原因
kubectl get pods --all-namespaces -o jsonpath="{range .items[*]}{.metadata.namespace}{'@'}{.metadata.name}{'\t'}{.status.containerStatuses[0].lastState.terminated.exitCode}{':'}{.status.containerStatuses[0].lastState.terminated.reason}{'\n'}{end}"|grep -v ":$"

cluster-admin创建

#vi admin-role.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
kubectl create -f admin-role.yaml
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep admin-token | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

修改默认的namespace配置

kubectl config view
kubectl config set-context kubernetes-admin@kubernetes --namespace=monitoring 

增加配置,并设置为默认

kubectl config set-context kube --namespace=kube-system --cluster=kubernetes --user=kubernetes-admin
kubectl config set current-context kube

删除配置

kubectl config delete-context kube

查看节点标签

kubectl get node --show-labels
kubectl label node k8snode1 disktype=ssd
kubectl label node k8s-node1 disktype-

获取资源版本

kubectl api-versions

获取资源类型

kubectl api-resources

获取yaml文件编写需要的内容

kubectl explain Deployment
kubectl explain Deployment.metadata

查看污点

kubectl describe node node1

删除master污点

kubectl taint nodes sl-master node-role.kubernetes.io/master- 
kubectl taint nodes --all node-role.kubernetes.io/master-

恢复master污点

kubectl taint nodes sl-master node-role.kubernetes.io/master=:NoSchedule

kubectl taint nodes 10.118.71.12 testmsg=update:NoExecute

自动补全

yum install -y bash-completion
kubectl completion bash >/etc/bash_completion.d/k8s.bash

deployment 添加容忍(配合标签使用可限制pod只部署到某个node)

# deployment的yaml需要在template:spec下面加上 
tolerations:
  - key: "INFAR_ONLY"
    operator: "Exists"
    effect: "NoExecute"

# 通常情况下,如果给一个节点添加了一个 effect 值为 NoExecute 的 taint,则任何不能忍受这个 taint 的 pod 都会马上被驱逐,任何可以忍受这个 taint 的 pod 都不会被驱逐。但是,如果 pod 存在一个 effect 值为 NoExecute 的 toleration 指定了可选属性 tolerationSeconds 的值,则表示在给节点添加了上述 taint 之后,pod 还能继续在节点上运行的时间。
# 对于tolerations属性的写法:

    其中的key、value、effect 与Node的Taint设置需保持一致, 还有以下几点说明:

        1、如果operator的值是Exists,则value属性可省略。

        2、如果operator的值是Equal,则表示其key与value之间的关系是equal(等于)。

        3、如果不指定operator属性,则默认值为Equal。
   另外,还有两个特殊值:

        1、空的key 如果再配合Exists 就能匹配所有的key与value ,也是是能容忍所有node的所有Taints。

        2、空的effect 匹配所有的effect。

污点配置例子:

kubectl taint nodes k8snode1 INFAR_ONLY=:NoExecute
kubectl label node k8snode1 nodeAppType=INFAR_ONLY

#yaml文件容忍污点配置:
  tolerations:
  - key: "INFAR_ONLY"
    operator: "Exists"
    effect: "NoExecute"
    #tolerationSeconds: 600  #加了会10分钟驱逐一次任何pod

#容忍任何污点:
   tolerations:
     - operator: Exists
     
#指定node
  nodeSelector: 
  #NodeAffinity: #优先 INFAR_ONLY 节点,没有则调度其它节点,和nodeSelector二选一
    nodeAppType: INFAR_ONLY

创建kubeconfig

#如果已经有config,可以通过以下命令获取当前使用的config
kubectl config view --minify --raw

cd /opt/kubernetes/ssl/
#创建私钥
openssl genrsa -out liaoxin.key 2048
#创建证书签名请求(O=组织信息,CN=用户名)
openssl req -new -key liaoxin.key -out liaoxin.csr -subj "/CN=liaoxin/O=liaoxin"

#签署证书(ca.pem为未加密的格式。)
#(--client-ca-file=/opt/kubernetes/ssl/ca.pem --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem)
openssl x509 -req -in liaoxin.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out liaoxin.crt -days 3650
#验证证书(可选)
openssl x509 -in liaoxin.crt -text -noout

#配置集群信息
kubectl config set-cluster k8s-test --embed-certs=true --certificate-authority=ca.pem --server="https://10.118.71.223:6443"
#配置客户端证书及密钥
kubectl config set-credentials liaoxin --embed-certs=true --client-certificate=liaoxin.crt --client-key=liaoxin.key
#配置context,组合cluster和credentials
kubectl config set-context liaoxin@k8s-test --cluster=k8s-test --user=liaoxin
#绑定角色
kubectl create clusterrolebinding liaoxin@admin --clusterrole=cluster-admin --user=liaoxin

#指定当前上下文
kubectl config use-context liaoxin@k8s-test
kubectl config view

#生成文件
cat /root/.kube/config

无法删除的ns

kubectl proxy
kubectl get ns auth-center  -o json | jq 'del(.spec.finalizers)' |curl -v -H "Content-Type: application/json" -X PUT --data-binary @- http://127.0.0.1:8001/api/v1/namespaces/auth-center/finalize

node证书过期更新

kubectl get csr
kubectl certificate approve node-xxxxx
手动认证,认证完后节点恢复正常

python使用证书连接K8S

#!/usr/bin/python3
from kubernetes import client

configuration = client.Configuration()

configuration.host = 'https://11.37.20.2:5443'
configuration.ssl_ca_cert = './ca.crt'
configuration.cert_file = './client.crt'
configuration.key_file = './client.key'
#configuration.verify_ssl = False

v1 = client.CoreV1Api(client.ApiClient(configuration))

ret = v1.list_pod_for_all_namespaces()

for i in ret.items:
    print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值