侧边栏壁纸
博主头像
会飞的大象博主等级

爱运动的程序猿

  • 累计撰写 124 篇文章
  • 累计创建 162 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录
k8s

k8s常用命令

会飞的大象
2021-07-20 / 0 评论 / 0 点赞 / 952 阅读 / 4,122 字

设置代理

kubectl proxy --address=192.168.112.38 --disable-filter=true &

k8s基本命令

删除Evicted 状态驱逐pod

kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod

强制删除pod

kubectl delete pod [pod name] --force --grace-period=0 -n [namespace]
注意:必须加-n参数指明namespace,否则可能报错pod not found。

#节点信息查询

kubectl get pods -o wide

#获取dashboard的token

kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

查看dashboard状态
kubectl get po,svc -n kubernetes-dashboard

卸载dashboard

pod删除
$ kubectl -n kube-system delete $(kubectl -n kube-system get pod -o name | grep dashboard)
pod “kubernetes-dashboard-3313488171-7706x” deleted
pod “kubernetes-dashboard-3313488171-ddkqd” deleted
pod “kubernetes-dashboard-3313488171-dpf9t” deleted
pod “kubernetes-dashboard-3313488171-jdz1n” deleted
pod “kubernetes-dashboard-3313488171-sxc9n” deleted

删除pod
$ kubectl delete pod kubernetes-dashboard-75d8b49cf6-wswnz -n kube-system --force --grace-period=0

卸载dashboard
kubectl delete deployment kubernetes-dashboard --namespace=kube-system
kubectl delete service kubernetes-dashboard --namespace=kube-system
kubectl delete role kubernetes-dashboard-minimal --namespace=kube-system
kubectl delete rolebinding kubernetes-dashboard-minimal --namespace=kube-system
kubectl delete sa kubernetes-dashboard --namespace=kube-system
kubectl delete secret kubernetes-dashboard-certs --namespace=kube-system
kubectl delete secret kubernetes-dashboard-csrf --namespace=kube-system
kubectl delete secret kubernetes-dashboard-key-holder --namespace=kube-system

集群配置文件的位置

# k8s配置文件位置
/etc/kubernetes/admin.conf

# k3s配置文件位置
/etc/rancher/k3s.k3s.yaml

# 改变配置文件的服务器地址
如果不是集群主机访问集群,就需要修改配置文件的server字段,只需将server的IP改成master的主机IP即可


获取全部空间

kubectl get pods --all-namespaces

删除deployments

kubectl delete deployments nginx-deployment

查询dashboard

dashboard get service kubernetes-dashboard
kubectl get pods --namespace=kubernetes-dashboard -o wide
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

预检集群

kubectl get cs
kubectl get pods -A  -o wide

k8s操作命令大全

通过yaml文件创建:

kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete)

kubectl apply -f xxx.yaml (创建+更新,可以重复使用)

 

通过yaml文件删除:

kubectl delete -f xxx.yaml

 

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

kubectl get pod/svc/deployment -n kube-system

  

查看所有namespace下面的pod/svc/deployment等等

kubectl get pod/svc/deployment --all-namcpaces 

 

重启pod(无法删除对应的应用,因为存在deployment/rc之类的副本控制器,删除pod也会重新拉起来)

kubectl get pod -n kube-system

 

查看pod描述:

kubectl describe pod XXX -n kube-system

 

查看pod 日志 (如果pod有多个容器需要加-c 容器名)

kubectl logs xxx -n kube-system  

 

删除应用(先确定是由说明创建的,再删除对应的kind):

kubectl delete deployment xxx -n kube-system

 

根据label删除:
kubectl delete pod -l app=flannel -n kube-system

 

扩容
kubectl scale deployment spark-worker-deployment --replicas=8

 

导出配置文件:
  导出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

 

以下为维护环境相关命令:

重启kubelet服务
systemctl daemon-reload
systemctl restart kubelet

 

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

 

# 查看集群信息
kubectl cluster-info

 

# 查看各组件信息
kubectl get componentstatuses

 

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

 

查看日志:
journalctl -u kubelet -f

 

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

 

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

 

解除不可调度状态
kubectl uncordon node1

 

master运行pod
kubectl taint nodes master.k8s node-role.kubernetes.io/master-
master不运行pod
kubectl taint nodes master.k8s node-role.kubernetes.io/master=:NoSchedule

 

K8s一些命令:
通过yaml文件创建:
kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete)
kubectl apply -f xxx.yaml (创建+更新,可以重复使用)
通过yaml文件删除:
kubectl delete -f xxx.yaml
查看kube-system namespace下面的pod/svc/deployment 等等(-o wide 选项可以查看存在哪个对应的节点)
kubectl get pod /svc/deployment -n kube-system
查看所有namespace下面的pod/svc/deployment等等
kubectl get pod/svc/deployment --all-namcpaces
重启pod(无法删除对应的应用,因为存在deployment/rc之类的副本控制器,删除pod也会重新拉起来)
kubectl get pod -n kube-system
查看pod描述:
kubectl describe pod XXX -n kube-system
查看pod 日志 (如果pod有多个容器需要加-c 容器名)
kubectl logs xxx -n kube-system
删除应用(先确定是由说明创建的,再删除对应的kind):
kubectl delete deployment xxx -n kube-system
根据label删除:
kubectl delete pod -l app=flannel -n kube-system
扩容
kubectl scale deployment spark-worker-deployment --replicas=8
导出配置文件:
  导出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
以下为维护环境相关命令:
重启kubelet服务
systemctl daemon-reload
systemctl restart kubelet
修改启动参数
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# 查看集群信息
kubectl cluster-info
# 查看各组件信息
kubectl get componentstatuses
#查看kubelet进程启动参数
ps -ef | grep kubelet
查看日志:
journalctl -u kubelet -f
设为不可调度状态:
kubectl cordon node1

将pod赶到其他节点:
kubectl drain node1
解除不可调度状态
kubectl uncordon node1
master运行pod
kubectl taint nodes master.k8s node-role.kubernetes.io/master-
master不运行pod
kubectl taint nodes master.k8s node-role.kubernetes.io/master=:NoSchedule

获取集群的基本信息
kubectl cluster-info
kubectl get nodes
kubectl get namespaces
kubectl get deployment --all-namespaces
kubectl get svc --all-namespaces
kubectl get pod
kubectl get pod -o wide --all-namespaces
kubectl logs podName
创建pod或srv
kubectl create -f development.yaml
检查将要运行的 Pod 的资源状况
kubectl describe pod podName
删除 Pod
kubectl delete pod podName
pod有多少副本
kubectl get rc
扩展 Pod
kubectl scale --replicas=3 rc podName
删除
kubectl delete deployment kubernetes-dashboard --namespace=kube-system
kubectl delete svc kubernetes-dashboard --namespace=kube-system
kubectl delete -f kubernetes-dashboard.yaml
进入pod
kubectl exec -ti podName /bin/bash


命令表
查看类命令:
获取节点相应服务的信息 : kubectl get pods 按selector名来查找pod: kubectl get pod --selector name=redis
查看集群信息: kubectl cluster-info
查看各组件信息: kubectl -s http://localhost:8080 get componentstatuses 或 kubectl get cs
查看pods所在的运行节点: kubectl gkubectl get pods -o yamlet pods -o wide
查看pods定义的详细信息: kubectl get pods -o yaml
查看运行pod的环境变量: kubectl exec pod名 env
查看指定pod的日志: kubectl logs -f pods/heapster-xxxxx -n kube-system

操作类命令:
创建资源: kubectl apply -f 文件名.yaml kubectl create -f 文件名.yaml
重建资源: kubectl replace -f 文件名 [--force]
删除资源: kubectl delete -f 文件名、kubectl delete pod pod名、kubectl delete rc rc名、kubectl delete service service名

kubectl进阶命令操作
kubectl get:获取指定资源的基本信息 kubectl get services kubernetes-dashboard -n kube-system #查看所有service
kubectl get deployment kubernetes-dashboard -n kube-system #查看所有发布
kubectl get pods --all-namespaces #查看所有pod
kubectl get pods -o wide --all-namespaces #查看所有pod的IP及节点
kubectl get pods -n kube-system | grep dashboard
kubectl get nodes -l zone #获取zone的节点
kubectl describe:查看指定资源详细描述信息 kubectl describe service/kubernetes-dashboard --namespace="kube-system"
kubectl describe pods/kubernetes-dashboard-349859023-g6q8c --namespace="kube-system" #指定类型查看
kubectl describe pod nginx-772ai #查看pod详细信息
kubectl scale:动态伸缩 kubectl scale rc nginx --replicas=5 # 动态伸缩
kubectl scale deployment redis-slave --replicas=5 #动态伸缩
kubectl scale --replicas=2 -f redis-slave-deployment.yaml #动态伸缩
kubectl exec:进入pod启动的容器 kubectl exec -it redis-master-1033017107-q47hh /bin/bash #进入容器

kubectl label:添加label值 kubectl label nodes node1 zone=north #增加节点lable值 spec.nodeSelector: zone: north #指定pod在哪个节点
kubectl label pod redis-master-1033017107-q47hh role=master #增加lable值 [key]=[value]
kubectl label pod redis-master-1033017107-q47hh role- #删除lable值
kubectl label pod redis-master-1033017107-q47hh role=backend --overwrite #修改lable值

kubectl rolling-update:滚动升级 kubectl rolling-update redis-master -f redis-master-controller-v2.yaml #配置文件滚动升级
kubectl rolling-update redis-master --image=redis-master:2.0 #命令升级
kubectl rolling-update redis-master --image=redis-master:1.0 --rollback #pod版本回滚
etcdctl 常用操作
etcdctl cluster-health #检查网络集群健康状态
etcdctl --endpoints=https://192.168.71.221:2379 cluster-health #带有安全认证检查网络集群健康状态
etcdctl member list
etcdctl set /k8s/network/config '{ "Network": "10.1.0.0/16" }'
etcdctl get /k8s/network/config

删除节点

从Kubernetes集群中删除节点,正确流程如下:

1、获取节点列表

kubectl get node

2、设置不可调度

kubectl cordon $node_name

3、驱逐节点上的Pod

kubectl drain $node_name --ignore-daemonsets

4、移除节点

节点上pod都被驱逐后,可以直接移除节点:

kubectl delete node $node_name

这样我们就平滑移除了一个 k8s 节点。

方法2

1.设置不可调度

kubectl cordon k8s-node-1
kubectl uncordon k8s-node-1       #取消

2,驱逐已经运行的业务容器

kubectl drain --ignore-daemonsets --delete-local-data k8s-node-1

3.如果想删除node 节点,则进行这个步骤

kubectl delete node k8s-node-1

节点分配不均衡,k8s创建多个副本默认先用第一台服务器,当第一台服务器资源满了才会去第二台服务器创建副本

解决方案:1. 给相应的节点打上标签,并添加亲和性。
2.使用DaemonSet 参考文档https://blog.csdn.net/yanggd1987/article/details/107507216

1.给相应节点打上标签

#查看节点全部标签
kubectl get node --show-labels
执行如下命令标注 node-75是配置 标签serviceType值为query-service
kubectl label node node-75 serviceType=query-service
然后通过 kubectl get node --show-labels 查看全部节点的 label。

如果要删除 label disktype,就执行如下命令删除即可:
kubectl label node k8s-node1 disktype-

2.给部署yaml加上亲和性

spec:
  replicas: 4
  selector:
    matchLabels:
      app: http-socsp-query
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: http-socsp-query
    spec:
      #亲和性添加 有nodeAffinity根据node选择 Podaffinity 根据pod等
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: serviceType
                operator: In
                values:
                - query-service
      containers:
      - image: 192.168.0.74:5000/http-socsp-query:latest
        imagePullPolicy: Always
        ports:
          - containerPort: 19237
        name: http-socsp-query
        resources: {}
        volumeMounts:

3.运行yaml文件

kubectl apply -f http-socsp-query.yaml

4.查看pod运行情况
kubectl get pod -o wide
image.png


5.副本数根据节点完成了均匀分配

常见命令

#启动异常查询
journalctl -xefu kubelet
#重启服务
systemctl daemon-reload
systemctl restart kubelet

label

执行如下命令标注 k8s-node1 是配置了 SSD的节点
kubectl label node k8snode1 disktype=ssd
然后通过 kubectl get node --show-labels 查看节点的 label。

kubectl get pod -o wide
可以看到disktype=ssd 已经成功添加到 k8snode1,除了 disktype,Node 还有几个 Kubernetes 自己维护的 label。有了 disktype 这个自定义 label,接下来就可以指定将 Pod 部署到 k8snod1。比如我编辑nginx.yml,增加nodeSelector标签,指定将此Pod部署到具有ssd属性的Node上去。

如果要删除 label disktype,就执行如下命令删除即可:
kubectl label node k8s-node1 disktype-

k8s设置重启服务

kubeadm 是k8s集群快速构建工具
kubelet 运行在所有节点上,负责启动pod和容器,以系统服务的形式出现
kubectl 是k8s命令行工具,提供指令
systemctl start kubelet
设置开机启动 systemctl enable kubelet

#重启服务
systemctl restart kubelet && systemctl enable kubelet

#详情 describe 删除delete 查询get

#查看所有信息服务
kubectl get pod,deployment,svc -n kube-system

#查询部署服务信息、端口、节点
kubectl get pod,svc,deploy -o wide

#集群信息
kubectl cluster-info

#命令空间
kubectl get namespace

#获取节点的全部空间
kubectl get pods --all-namespaces

#Controller 信息
#Deployment 查询全部部署(控制器)
kubectl get deployments.apps
kubectl get deployments

#Replicaset 控制器(副本)
kubectl get replicasets.apps
kubectl get replicasets

#Statefulset 控制器
kubectl get statefulsets.apps
kubectl get statefulsets

#Daemonset 控制器
kubectl get daemonsets.apps
kubectl get daemonsets

#job控制器
kubectl get job

#Service
kubectl get service

#针对服务查询对应端口nginx-service服务名
kubectl get svc nginx-service -o wide

#svc 服务对外暴露的端口
kubectl get svc

#pod
kubectl get pod

#查询pod暴露端口
kubectl get pods,svc

#参数
-o wide 查看更多信息,Pod 可以查看到 ip 地址,node 节点。Service 可以查看到选择器,控制器可以看到镜像,选择器等。

–all-namespaces 查看所有 namespace 下的资源

查看污点

当不清楚集群中node的污点时,可以用以下命令查看和删除污点。

kubectl describe nodes k8s-master |grep Taints
Taints:             gameble=true:NoSchedule

[root@k8s-master ~]# kubectl describe nodes k8s-slave1 | grep Taints
Taints:             drunk=true:NoSchedule

[root@k8s-master ~]# kubectl describe nodes k8s-slave2 | grep Taints 
Taints:             smke=true:NoSchedule

删除污点,根据上边命令查出来的污点名来删。

gameble- 就是污点名,后加减号就删掉了
gameble
[root@k8s-master ~]# kubectl taint node k8s-master gameble-
node/k8s-master untainted

[root@k8s-master ~]# kubectl taint node k8s-slave1 drunk-
node/k8s-slave1 untainted

[root@k8s-master ~]# kubectl taint node k8s-slave2 smke-
node/k8s-slave2 untainted

#重启服务
kubeadm reset
#删除deployments
kubectl delete deployments nginx-deployment
#查看pod日志inittax容器名,inittax-75df9b9b47-nv6vl指pod名称
kubectl logs inittax-75df9b9b47-nv6vl -c inittax
#预检集群
kubectl get cs
kubectl get pods -A -o wide
#查看pod详情
kubectl describe pod inittax-bf647f97-4bmm8

#查询dashboard的token
dashboard get service kubernetes-dashboard
kubectl get pods --namespace=kubernetes-dashboard -o wide
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
#查看dashboard状态
kubectl get po,svc -n kubernetes-dashboard
#获取配置
kubectl config view
#删除节点
kubectl delete node k8s-node2

集群命令

子节点重新加入集群

# 重启服务
kubeadm reset
# 重新加载节点
#先获取token
[root@k8s-master pki]# kubeadm token create --print-join-command
kubeadm join 192.168.180.121:6443 --token p08kmc.nci5h0xfmlcw92vg     --discovery-token-ca-cert-hash sha256:44315d59e08f4d94bc75d20730b861818dfeda6517c1b228399f061f4256329b

### 获取加入集群命令
kubeadm token create --print-join-command

hostnamectl set-hostname node-199



### 子节点重新加入
[root@k8s-node01 lib]# kubeadm join 192.168.180.121:6443 --token p08kmc.nci5h0xfmlcw92vg     --discovery-token-ca-cert-hash sha256:44315d59e08f4d94bc75d20730b861818dfeda6517c1b228399f061f4256329b
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.16" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

查看节点信息

[root@k8s-master pki]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 3d4h v1.16.1
k8s-node01 Ready 2m35s v1.16.1
k8s-node02 Ready 3d3h v1.16.1

踢出节点

#在硬件升级,维护或节点出现异常等情况下,我们需要将某些剔除,使其脱离kubernetes集群的调度范围。
先将要剔除会退出的节点设置成不可调度状态,设置好之后节点状态上会多了一个 “SchedulingDisabled”标记,这样新创建的pod就不会网该节点调度
kubectl cordon test-k8s-node05

之后驱逐调节点上的pod

kubectl drain test-k8s-node05

如果是节点出了问题,执行不了指令,可以采取强制驱逐的方式

kubectl delete pods -n kube-system nginx-6qz6s

将节点从集群中剔除或退出

kubectl delete node test-k8s-node05

加入集群后无法运行容器

重置kubernetes服务,重置网络。删除网络配置,link

sudo ifconfig cni0 down
sudo ip link delete cni0
kubeadm reset
kubeadm join 192.168.0.74:6443 --token mhqm8p.3ae3ksr8uwgisgxq --discovery-token-ca-cert-hash sha256:49ee762d2f9096bfd4a58c84b983544b7a557c2f63302dc17281c40cbac668d0

0

评论区