Kubernetes节点与令牌管理

一、令牌管理

查看令牌

[root@master ~]# kubeadm token list

删除令牌

[root@master ~]# kubeadm token delete <令牌值>

创建令牌-临时令牌

# 临时 token 生成:
[root@master ~]# kubeadm token create
此 token 的有效期为 24 小时,过期后需要重新生成 token 。

创建令牌-临时令牌

# 永久 token 生成:
[root@master ~]# kubeadm token create --ttl 0
此 token 的有有效期为永久有效。 为了安全起见,建议使用临时 token ,而不要使用永久的 token

二、K8S节点管理

2.1、查看节点

查看当前的节点信息:
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION
master Ready master 4h40m v1.19.3
node-1 Ready <none> 4h39m v1.19.3
node-2 Ready <none> 3h58m v1.19.3

2.2、删除节点

驱逐即将删除node节点上的pod

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

[root@master ~]# kubectl drain node-2 --delete-local-data --force --ignore-daemonsets
注:默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod 参数说明: --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 执行优雅的中止。

kubectl drain 返回成功表明所有的 pod (除了前面排除的那些)已经被安全驱逐(遵循期望优雅的中止期,并且没有违反任何应用程序级别的中断预算)。然后,通过对物理机断电或者在云平台上删除节点所在的虚拟机,都能安全的将节点移除。

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

[root@master ~]# kubectl uncordon node-2

删除节点

[root@master ~]# kubectl delete node <节点名称>

删除后进行查看

查看当前的节点信息:
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION
master Ready master 4h40m v1.19.3
node-1 Ready <none> 4h39m v1.19.3

2.3、集群节点扩展

Master 节点加入集群

kubeadm join 192.168.2.100:6444 \
--token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:ec36d9832497453d5297e86f13928a3374e831da8861372f2086ea79c000bad7 \
--control-plane --certificate-key 80847d457d198a8ce1483817e11de8a472ff68b94410db2574e55c2f56f1b7be

Node节点加入集群

kubeadm join 192.168.2.100:6444 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:ec36d9832497453d5297e86f13928a3374e831da8861372f2086ea79c000bad7

以上信息为高可用的加入信息,这里所显示的 token 的有效期为 24 小时,在有效期内,可以直接使用命令加入我们的集群,如果超过了有效期的话,那么我们的 token 已经过期,就需要我们重新生成 token ,然后在进行加入。

2.4、token过期的解决方案

token 过期后,生成新的token

2.4.1、节点加入单master集群

  • 创建新的token
[root@master ~]# kubeadm token create

W0410 16:22:44.706213   11426 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
oqghzy.40dftxcaeegan10t < 这一条信息是我们新生成的 token >

获取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 | sed 's/^.* //'

a5a41919d1200e21bcafe066a1423ca904aaa70a9dd1582ea668993e8e831fc7   < 这一条信息就是我们的 hash 值 >
  • 将新master加入单master的集群
    然后我们通过新生成的 token 和 ca 证书 sha256 编码 hash 值重新组装得到有效的 work node 加入集群命令:
[root@master ~]# kubeadm join 192.168.2.20:6443 --token oqghzy.40dftxcaeegan10t \
--discovery-token-ca-cert-hash sha256:a5a41919d1200e21bcafe066a1423ca904aaa70a9dd1582ea668993e8e831fc7 这里需要注意一下,如果是加入单 master 集群,那么我们使用的 IP 地址为我们 master 的 IP 地址与 6443 端口。 #或者我们也可以使用命令,直接生成出包含新的token与hash值的完整加入命令,这样更加轻松有效。 [root@master ~]# kubeadm token create --print-join-command kubeadm join 192.168.2.100:6444 --token 1kuag1.elna9kktnznxr50m --discovery-token-ca-cert-hash sha256:a5a41919d1200e21bcafe066a1423ca904aaa70a9dd1582ea668993e8e831fc7

2.4.2、节点加入高可用集群

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

  • 首先生成新的 token
[root@master ~]# kubeadm token create --print-join-command
  • 生成新的用于 master 加入的证书
[root@master ~]# kubeadm init phase upload-certs --upload-certs

W0410 16:49:45.773081   21497 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
1d57c7bbf579b9bdcf3441cd45dd01a2a066e75b45fe672a0f5295e07a337d0d < 这一条信息是用于 master 加入的证书信息 >

然后我们通过新生成的 token 和 ca 证书 sha256 编码 hash 值还有新生成的 master 证书的值,重新组装得到有效的 master 加入集群命令:

kubeadm join 192.168.2.100:6444 \
--token 1kuag1.elna9kktnznxr50m \
--discovery-token-ca-cert-hash sha256:a5a41919d1200e21bcafe066a1423ca904aaa70a9dd1582ea668993e8e831fc7 \
--control-plane --certificate-key 1d57c7bbf579b9bdcf3441cd45dd01a2a066e75b45fe672a0f5295e07a337d0d

五、kubernetes节点与令牌管理的更多相关文章

  1. Kubernetes容器集群管理环境 - Prometheus监控篇

    一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...

  2. Kubernetes容器集群管理环境 - 完整部署(中篇)

    接着Kubernetes容器集群管理环境 - 完整部署(上篇)继续往下部署: 八.部署master节点master节点的kube-apiserver.kube-scheduler 和 kube-con ...

  3. 阿里云上万个 Kubernetes 集群大规模管理实践

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 汤志敏,阿里 ...

  4. Kubernetes容器集群管理环境 - 完整部署(下篇)

    在前一篇文章中详细介绍了Kubernetes容器集群管理环境 - 完整部署(中篇),这里继续记录下Kubernetes集群插件等部署过程: 十一.Kubernetes集群插件 插件是Kubernete ...

  5. Kubernetes 使用 Kubevirt 运行管理 Windows 10 操作系统

    原文链接:https://fuckcloudnative.io/posts/use-kubevirt-to-manage-windows-on-kubernetes/ 最近我发现我的 Kubernet ...

  6. 六、Kubernetes节点与 Pod 亲和性

    Kubernetes节点与 Pod 亲和性 一.节点亲和性策略介绍 ​pod.spec.nodeAffinity preferredDuringSchedulingIgnoredDuringExecu ...

  7. 我眼中的Linux设备树(五 根节点)

    五 根节点一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是"/",至少需要包含model和compatible两个属性.model属性我们 ...

  8. Linux设备树(五 根节点)

    五 根节点 一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性.model属性我们在属性那节已经说过 ...

  9. Token令牌管理权限

    什么是token HTTP是一种无状态的协议,也就是HTTP没法保存客户端的信息,没办法区分每次请求的不同. Token是服务器生成的一串字符,作为客户端请求的令牌.当第一次登陆后,服务器会分发Ton ...

随机推荐

  1. Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  2. java学习第一天.day04

    顺序结构 代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的, 一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束. 选择结构 选择结构也被称为分支结构.代码根据逻辑 ...

  3. 分库分表之ShardingSphere

    目录 分库分表诞生的前景 分库分表的方式(垂直拆分,水平复制) 1.垂直拆分 1.1 垂直分库 1.2 垂直分表 2.水平拆分 2.1 水平分库 2.2 水平分表 分库分库中间件 ShardingSp ...

  4. Android平台Camera2数据如何对接RTMP推流到服务器

    1. Camera2架构 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用 ...

  5. 游标长时间open导致表无法vacuum问题

    一.问题描述 用户在实际中可能会碰到类似以下 dead rows 无法 vacuum的问题,一个可能的原因是由于游标未结束的原因. test=# vacuum(verbose) t1; INFO: v ...

  6. Thrift RPC改进—更加准确的超时管理

    前言: 之前我们组内部使用Thrift搭建了一个小型的RPC框架,具体的实现细节可以参考我之前的一篇技术文章:https://www.cnblogs.com/kaiblog/p/9507642.htm ...

  7. shell脚本自动化部署Zabbix4.2(修改脚本替换版本)

    #!/bin/bash # 检查操作系统版本,该脚本只能运行在 Centos 7.x 系统上 cat /etc/redhat-release |grep -i centos |grep '7.[[:d ...

  8. IO流的文件输入输出效率问题

    IO流的文件输入输出效率问题 第一种方法 我用使用一个数组,把FIleInputStream获取到的二进制数存入这个数组,然后使用FIleOutputStream进行输出 缺点:速度慢 优点:不消耗内 ...

  9. Windows DNS服务器的子网掩码排序

    对于跨多个站点部署的应用服务,会在各个站点都有服务器,并且对应不同的IP地址.我们希望每个客户端访问就近的资源.这个时候可以启用Windows DNS服务器中的子网掩码排序(子网优先)netmask ...

  10. .NET Core Web APi类库如何内嵌运行?

    话题 我们知道在.NET Framework中可以嵌入运行Web APi,那么在.NET Core(.NET 6+称之为.NET)中如何内嵌运行Web Api呢,在实际项目中这种场景非常常见,那么我们 ...