OpenShift 4 - 通过DaemonSet在指定Node上运行守护程序

OpenShift 4.x HOL教程汇总

通过DaemonSet在Worker Node上运行守护程序

  1. 查看当前OpenShift集群中的Worker Node。
$ oc get node -l node-role.kubernetes.io/worker
NAME                                              STATUS   ROLES    AGE   VERSION
ip-10-0-155-228.ap-southeast-1.compute.internal   Ready    worker   8d    v1.18.3+012b3ec
ip-10-0-190-239.ap-southeast-1.compute.internal   Ready    worker   8d    v1.18.3+012b3ec
  1. 创建项目
$ oc new-project my-daemon

说明:为在项目中运行DaemonSet,不建议为项目使用"openshift.io/node-selector"注释。这是因为可能由于使用了该注释,使得属于该项目的DaemonSet无法运行在其希望运行的Node上。如果一个项目有上述注释,可以使用以下命令情况该注释的内容。

$ oc patch namespace my-daemon -p '{"metadata": {"annotations": {"openshift.io/node-selector": ""}}}'
  1. 在OpenShift的控制台中进入my-daemon项目,然后运行以下YAML创建名为hello-daemon的DaemonSet。
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: hello-daemon
spec:
  selector:
    matchLabels:
      app: hello-openshift
  template:
    metadata:
      labels:
        app: hello-openshift
    spec:
      nodeSelector:
        kubernetes.io/hostname: ip-10-0-155-228
      containers:
        - name: hello-openshift
          image: openshift/hello-openshift
          ports:
            - containerPort: 8080
  1. 查看DaemonSet的详细信息,可看到OpenShift缺省是将hello-daemon在2个Worker Node上各运行了1个Pod。
$ oc get ds
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
hello-daemon   2         2         2       2            2           <none>          21s
 
$ oc describe ds/hello-daemon
Name:           hello-daemon
Selector:       app=hello-openshift
Node-Selector:  <none>
Labels:         <none>
Annotations:    deprecated.daemonset.template.generation: 1
Desired Number of Nodes Scheduled: 2
Current Number of Nodes Scheduled: 2
Number of Nodes Scheduled with Up-to-date Pods: 2
Number of Nodes Scheduled with Available Pods: 2
Number of Nodes Misscheduled: 0
Pods Status:  2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=hello-openshift
  Containers:
   hello-openshift:
    Image:        openshift/hello-openshift
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                  Message
  ----    ------            ----  ----                  -------
  Normal  SuccessfulCreate  107s  daemonset-controller  Created pod: hello-daemon-szhrz
  Normal  SuccessfulCreate  107s  daemonset-controller  Created pod: hello-daemon-ktbgn
  1. 查看pod信息,确认2个pod运行在worker node上了。
$ oc get pod -n my-daemon -o wide
NAME                 READY   STATUS    RESTARTS   AGE   IP             NODE                                              NOMINATED NODE   READINESS GATES
hello-daemon-ktbgn   1/1     Running   0          15m   10.131.0.107   ip-10-0-155-228.ap-southeast-1.compute.internal   <none>           <none>
hello-daemon-szhrz   1/1     Running   0          15m   10.128.2.244   ip-10-0-190-239.ap-southeast-1.compute.internal   <none>           <none>

通过DaemonSet在指定Node上运行守护程序

  1. 查看一个Node节点的标签信息。以下查到该Node中有“kubernetes.io/hostname=ip-10-0-155-228”的标签。
$ oc describe node ip-10-0-155-228.ap-southeast-1.compute.internal
Name:               ip-10-0-155-228.ap-southeast-1.compute.internal
Roles:              worker
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/instance-type=m5.4xlarge
                    beta.kubernetes.io/os=linux
                    failure-domain.beta.kubernetes.io/region=ap-southeast-1
                    failure-domain.beta.kubernetes.io/zone=ap-southeast-1a
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=ip-10-0-155-228
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/worker=
                    node.kubernetes.io/instance-type=m5.4xlarge
                    node.openshift.io/os_id=rhcos
                    topology.kubernetes.io/region=ap-southeast-1
                    topology.kubernetes.io/zone=ap-southeast-1a
。。。
  1. 在OpenShift控制台的项目里创建以下DaemonSet,其中使用了上一步查到的标签作为“nodeSelector”。
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: hello-daemon1
  namespace: my-daemon
spec:
  selector:
    matchLabels:
      app: hello-openshift
  template:
    metadata:
      labels:
        app: hello-openshift
    spec:
      nodeSelector:
        kubernetes.io/hostname: ip-10-0-155-228
      containers:
        - name: hello-openshift
          image: openshift/hello-openshift
          ports:
            - containerPort: 8080
  1. 查看DaemonSet,确认这次hello-daemon1只运行在标签为“kubernetes.io/hostname=ip-10-0-155-228”的节点中了。
$ oc get ds -n my-daemon
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                            AGE
hello-daemon1  1         1         1       1            1           kubernetes.io/hostname=ip-10-0-155-228   79m
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值