K8S节点管理
1、查看节点

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE    VERSION
master   Ready    control-plane,master   2d8h   v1.23.0
node01   Ready    <none>                 2d4h   v1.23.0
node02   Ready    <none>                 20h    v1.23.0

2、删除节点
1)驱逐即将删除node节点上的pod

​ 如果需要从集群中移除 node02 这个 Node 节点,在 master上执行下面的命令,安全驱逐节点上面所有的 pod,该命令执行成功后 node节点开始释放所有 pod ,并且不接收新的 pod 进程

[root@master ~]# kubectl drain node02 --delete-emptydir-data --force --ignore-daemonsets
node/node02 cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-c6cnz, kube-system/kube-proxy-wzvm4
node/node02 drained

参数说明:

​ --force:当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理的时候就需要用 --force 来强制执行 (例如:kube-proxy)
​ --ignore-daemonsets:无视 DaemonSet 管理下的 Pod
​ --delete-local-data:如果有 mount local volumn 的 pod,会强制杀掉该 pod 并把料清除掉,另外如果跟本身的配置信息有冲突时,drain就不会执行该命令会安全驱逐节点上面所有的 pod ,安全驱逐的方式将会允许 pod 里面的容器遵循指定的 Pod DisruptionBudgets 执行优雅的中止。

2) 恢复node,继续接收新pod

​ 节点上的pod被驱逐后,如果不删除node的话,进行完对应的升级或维护后可以恢复node,恢复接收新的pod进程

[root@master ~]# kubectl uncordon node02

3)删除节点

[root@master ~]# kubectl delete node node02
node "node02" deleted

4)查看节点

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE    VERSION
master   Ready    control-plane,master   2d9h   v1.23.0
node01   Ready    <none>                 2d5h   v1.23.0

5)删除配置

[root@node02 ~]# kubeadm reset --force
[root@node02 ~]# rm -rf /etc/cni/net.d/

节点加入单主集群

加入方式一:

1)创建新的token

[root@master ~]# kubeadm token create 
W0606 20:32:28.134374   51026 common.go:167] WARNING: could not obtain a bind address for the API Server: no default routes found in "/proc/net/route" or "/proc/net/ipv6_route"; using: 0
.0.0.0376gn4.9fffhgwg6yual7tj         # 新创建的token

2)获取ca的hash值

​ token 生成完后,我们还需要获取 ca 证书 sha256 编码 hash 值,查看当前 k8s 集群的 ca 证书 sha256 编码 hash 值,我们的 ca 证书默认存放在 /etc/kubernetes/pki 目录下。

[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex
(stdin)= 2b25ee800dd3a816b98b5f96e3f87c43add0cdc55a1d3037e7e4f43ecec1f902

3)将node02节点加入K8S集群

[root@node02 ~]# kubeadm reset --force
[root@node02 ~]# rm -rf /etc/cni/net.d/
[root@node02 ~]# kubeadm join 192.168.4.10:6443 --token 376gn4.9fffhgwg6yual7tj --discovery-token-ca-cert-hash sha256:2b25ee800dd3a816b98b5f96e3f87c43add0cdc55a1d3037e7e4f43ecec1f902
 
[root@master ~]# kubectl get nodes        # master上查看node节点
NAME     STATUS   ROLES                  AGE    VERSION
master   Ready    control-plane,master   2d9h   v1.23.0
node01   Ready    <none>                 2d5h   v1.23.0
node02   Ready    <none>                 49s    v1.23.0

加入方式二:

1)在master节点上使用命令,直接生成出包含新的token与hash值的完整加入命令

[root@master ~]# kubeadm token create --print-join-command 
kubeadm join 192.168.4.10:6443 --token 2d9vv9.whf5a1hj1g80f0z0 --discovery-token-ca-cert-hash sha256:6e6218060fabe62fa57b118b59b61ba84fe0deb359107286f416d6681b4411b9

节点加入高可用集群

​ 高可用集群与单master集群不同的地方在于还要生成用于新master加入的证书

1)首先生成新的 token

[root@master ~]# kubeadm token create --print-join-command 
kubeadm join 192.168.4.10:6443 --token 2d9vv9.whf5a1hj1g80f0z0 --discovery-token-ca-cert-hash sha256:6e6218060fabe62fa57b118b59b61ba84fe0deb359107286f416d6681b4411b9 

2)生成新的用于 master 加入的证书

[root@master ~]# kubeadm init phase upload-certs --upload-certs 
I0902 10:32:26.020896   41297 version.go:255] remote version is much newer: v1.25.0; falling back to: stable-1.23
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
1224f68070347f1e8093021b07eb2c11917d9d5151688e35c79745dbc30ef719   # master加入的证书信息

3)通过新生成的 token、ca 证书 sha256 编码 hash 值、 master 证书的值,组成master 加入集群命令:

kubeadm join 192.168.4.10:6443 --token 2d9vv9.whf5a1hj1g80f0z0 --discovery-token-ca-cert-hash sha256:6e6218060fabe62fa57b118b59b61ba84fe0deb359107286f416d6681b4411b9 --control-plane --certificate-key 1224f68070347f1e8093021b07eb2c11917d9d5151688e35c79745dbc30ef719

最终节点加入成功展示效果

[root@w2 kubernetes]# kubectl get nodes
NAME   STATUS   ROLES    AGE   VERSION
m      Ready    master   23h   v1.14.0
w1     Ready    <none>   23h   v1.14.0
w2     Ready    <none>   74s   v1.14.0

问题汇总

https://www.jianshu.com/p/6fa06b9bbf6a

出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:

[root@w2 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

[root@w2 kubernetes]# kubectl get nodes
NAME   STATUS   ROLES    AGE     VERSION
m      Ready    master   23h     v1.14.0
w1     Ready    <none>   23h     v1.14.0
w2     Ready    <none>   4m20s   v1.14.0

获取并删除deployment

原因
修改deployment名称后,发现原来的deployment创建的pod还存在,使用kubectl delete pod name发现,pod删除后,又会重新创建一个pod

-deployment controller:管理维护deployment,关联deployment和deployment controller,保证运行指定数量的pod,当deployment 更新时,控制实现deployment controller和pod的更新。

获取命令 kubectl get deployment

删除命令 kubectl delete deployment [deployment 名字]

[root@w2 ~]# kubectl get deployment
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
nginx     1/1     1            1           14m
nginx01   1/1     1            1           12m
[root@w2 ~]# kubectl delete deployment  nginx
deployment.extensions "nginx" deleted
[root@w2 ~]# kubectl delete deployment  nginx01
deployment.extensions "nginx01" deleted


查看是否删除

 [root@w2 ~]# kubectl get deployment
No resources found in default namespace


http://events.jianshu.io/p/0b68abc336f9 k8s kubectl常用命令总结

集群测试

以下在master上执行

部署一个nginx

kubectl create deployment nginx --image=nginx

暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort

查看服务端口

kubectl get pod,svc
[root@master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@master ~]# kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-65f88748fd-9sqvr   1/1     Running   0          25s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        26h
service/nginx        NodePort    10.106.114.212   <none>        80:32080/TCP   12s

访问master/node1/node2:32080

删除
kubectl delete -f ./pod.json          # 删除 pod.json 文件中定义的类型和名称的 pod
kubectl delete pod,service baz foo    # 删除名为“baz”的 pod 和名为“foo”的 service


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐