K8S节点管理
K8S节点管理1、查看节点2、删除节点1)驱逐即将删除node节点上的pod如果需要从集群中移除 node02 这个 Node 节点,在 master上执行下面的命令,安全驱逐节点上面所有的 pod,该命令执行成功后 node节点开始释放所有 pod ,并且不接收新的 pod 进程参数说明:--force:当一些pod不是经 ReplicationController, ReplicaSet,
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
更多推荐
所有评论(0)