目录
一、Node的隔离与恢复
二、Node 的扩容
三、Label
四、Namespace:集群环境共享与隔离
1、创建namespace
2、定义Context
3、设置工作组在特定的Context中工作
一、Node的隔离与恢复
在硬件升级、维护等情况下,我们需要将某些node隔离,使其脱离Kubernetes集群的调度范围,Kubernetes提供了一种机制,既可以将Node纳入调度范围,也可以将Node脱离调度范围。我们可以使用yaml文件或者kubectl 命令进行调整
1、使用yaml文件
[root@k8s-master-1 node-manager]# vim node.yaml
apiVersion: v1
kind: Node
metadata:
name: k8s-node-1
labels:
kubernetes.io/hostname: k8s-node-1
spec:
unschedulable: true
[root@k8s-master-1 node-manager]# kubectl apply -f node.yaml
node/k8s-node-1 configured
[root@k8s-master-1 node-manager]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-node-1 Ready,SchedulingDisabled <none> 6m39s v1.19.0
k8s-node-2 Ready <none> 65d v1.19.0
可以看到其中添加了一项SchedulingDisabled,这样后续系统就不会将创建的pod调度到该node了。
如果需要将某个node纳入调度的范围,则需要将unschedulable: false 就能恢复调度了。
2、使用kubectl patch 命令
我们也可以直接运行kubectl patch命令实现Node的隔离调度效果,不适用yaml文件
[root@k8s-master-1 node-manager]# kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true} }'
node/k8s-node-1 patched
[root@k8s-master-1 node-manager]#
[root@k8s-master-1 node-manager]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-node-1 Ready,SchedulingDisabled <none> 14m v1.19.0
k8s-node-2 Ready <none> 65d v1.19.0
[root@k8s-master-1 node-manager]#
[root@k8s-master-1 node-manager]# kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":false} }'
node/k8s-node-1 patched
[root@k8s-master-1 node-manager]#
[root@k8s-master-1 node-manager]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-node-1 Ready <none> 14m v1.19.0
k8s-node-2 Ready <none> 65d v1.19.0
3、使用kubectl cordon 和uncordon命令
使用kubectl 子命令 cordon和uncordon也可以实现Node的隔离与恢复调度。
[root@k8s-master-1 node-manager]# kubectl cordon k8s-node-1
node/k8s-node-1 cordoned
[root@k8s-master-1 node-manager]#
[root@k8s-master-1 node-manager]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-node-1 Ready,SchedulingDisabled <none> 16m v1.19.0
k8s-node-2 Ready <none> 65d v1.19.0
[root@k8s-master-1 node-manager]#
[root@k8s-master-1 node-manager]# kubectl uncordon k8s-node-1
node/k8s-node-1 uncordoned
[root@k8s-master-1 node-manager]#
[root@k8s-master-1 node-manager]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-node-1 Ready <none> 16m v1.19.0
k8s-node-2 Ready <none> 65d v1.19.0
注意:某个Node脱离调度范围时,其上运行的Pod并不会自动停止,用户需要对其手动停止。
二、Node 的扩容
在实际生产系统中经常出现服务器容量不足的情况,这时就需要购买新的服务器,然后将应用系统进行水平扩展来完成对系统的扩容。
在新的Node上安装docker、kubectl、和kube-proxy服务,然后配置kubectl、和kube-proxy服务的启动参数,然后将master url指定为当前kubernetes集群master的地址,然后启动服务即可。
三、Label
Label(标签)使用户可灵活定义的对象属性,对于正在运行的资源对象,我们随时可以通过kubectl label命令进行增删改操作。
查看标签 [root@k8s-master-1 test]# kubectl get 资源类型(pod、node等等) --show-labels
制作标签 kubectl label 资源类型 资源名称 标签key=标签value
[root@k8s-master-1 test]# kubectl label pod slave cpu=8cup32g
删除标签 [root@k8s-master-1 test]# kubectl label pod slave cpu-
修改标签 [root@k8s-master-1 test]# kubectl label pod slave cpu=8cup32g --pverwrite
四、Namespace:集群环境共享与隔离
在一个组织内部,不通的工作组可以在同一个kubernetes集群中工作,kubernetes通过Namespace(命名空间)和Context的设置对不同的工作组进行区分,使得它们既可以共享同一个kubernetes集群的服务,也可以互不干扰。
1、创建namespace
为了实现这两个分组,需要创建两个命名空间
[root@k8s-master-1 node-manager]# vim namespaces.yaml
apiVersion: v1
kind: Namespace
metadata:
name: test1
---
apiVersion: v1
kind: Namespace
metadata:
name: test2
[root@k8s-master-1 node-manager]# kubectl apply -f namespaces.yaml
namespace/test1 created
namespace/test2 created
[root@k8s-master-1 node-manager]# kubectl get ns
NAME STATUS AGE
test1 Active 3s
test2 Active 3s
或者使用kubectl 命令创建
[root@k8s-master-1 node-manager]# kubectl create ns test1
namespace/test1 created
#删除命名空间
[root@k8s-master-1 node-manager]# kubectl delete ns test1 test2
namespace "test1" deleted
2、定义Context
接下来,需要为每个工作组分别定义一个Context,即运行环境,这个环境将属于某个特定的命名空间
通过 kubectl config set-context 命令定义Context,并将Context 置于之前创建的命名空间中文章来源:https://www.toymoban.com/news/detail-833014.html
1、先创建两个命名空间,development为开发、production为生产
[root@k8s-master-1 node-manager]# kubectl create ns development
namespace/development created
[root@k8s-master-1 node-manager]# kubectl create ns production
namespace/production created
2、创建一个集群名称:
[root@k8s-master-1 node-manager]# kubectl config set-cluster k8s-cluster --server=https://192.168.134.135:8080
Cluster "k8s-cluster" set.
3、创建Context:创建以后会在:~/.kube/config中生成一个context
[root@k8s-master-1 node-manager]# kubectl config set-context ctx-dev --namespace=development --cluster=k8s-cluster --user=dev
Context "ctx-dev" created.
[root@k8s-master-1 node-manager]# kubectl config set-context ctx-prod --namespace=production --cluster=k8s-cluster --user=prod
Context "ctx-prod" created.
4、通过 kubectl config view 查看已经定义的Context
apiVersion: v1
clusters:
- cluster:
server: https://192.168.134.135:8080
name: k8s-cluster
contexts:
- context:
cluster: k8s-cluster
namespace: development
user: dev
name: ctx-dev
- context:
cluster: k8s-cluster
namespace: production
user: prod
name: ctx-prod
current-context: ctx-dev
kind: Config
preferences: {}
users: null
3、设置工作组在特定的Context中工作
我们可以通过 kubectl config use-context 命令设置当前的运行环境, 文章来源地址https://www.toymoban.com/news/detail-833014.html
1、通过下面命令把当前工作环境设置为 ctx-dev 开发环境
[root@k8s-master-1 node-manager]# kubectl config use-context ctx-dev
Switched to context "ctx-dev".
2、切换到运维组
[root@k8s-master-1 ~]# kubectl config use-context ctx-prod
Switched to context "ctx-prod".
3、获取当前K8S上下文
[root@k8s-master-1 ~]# kubectl config current-context
ctx-dev
4、或取全局上下文
[root@k8s-master-1 ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* ctx-dev k8s-cluster dev development
ctx-prod k8s-cluster prod production
命令解释
CURRENT: * 在哪个上面表示当前所处哪个集群
NAME:上下文名称
CLUSTER:集群名称
AUTHINFO:用户名称
NAMESPACE:所处命名空间
5、切换上下文
命令:kubectl config use-context 上下文名称 【kubectl config get-contexts中NAME就是上下文名称】
6、重命名context
命令:kubectl config rename-context 现名称 新名称
我将context1修改为context1-new
kubectl config rename-context context1 context1-new
7、删除context
命令:kubectl config delete-context 上下文名称
到了这里,关于二十三、node、Label、namespace管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!