011、kubernetes扩展内容
本文最后更新于 68 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

kubernetes扩展内容

一.为Node节点增加污点

1.污点类型

NoExecute:
    不再接受新的Pod调度,并且还会驱赶已经调度到当前节点的Pod。
NoSchedule:
    不再接受新的Pod调度,但也不会驱赶已经调度到当前Node的Pod。
PreferNoSchedule
    该节点可以接收调度,但尽可能的会将Pod调度到其它节点,如果其它节点无法被调度后,依旧也可以调度到当前节点哟。

温馨提示:
    如下图所示,K8S1.5版本中并不支持"NoExecute"这种策略哟。

image-20210902211710174

2.给node打标签

kubectl label node k8s103.oldboyedu.com school=
kubectl label node k8s103.oldboyedu.com class=oldboyedu-linux

image-20210902205908561

3.给node删除标签

kubectl label node k8s103.oldboyedu.com school-
kubectl label node k8s103.oldboyedu.com class-

温馨提示:
    只要在KEY的名称后面加一个"-"就可以删除该标签哟!

image-20210902210100837

4.添加污点

(1)先对节点打标签
kubectl label node k8s103.oldboyedu.com school=oldboyedu

(2)添加污点
kubectl taint node k8s103.oldboyedu.com school=oldboyedu:NoSchedule

(3)查看污点
kubectl describe node k8s103.oldboyedu.com | grep Taints

image-20210902212014875

5.删除污点

(1)删除污点
kubectl taint node k8s103.oldboyedu.com school-

(2)查看污点是否被成功删除
kubectl describe node k8s103.oldboyedu.com | grep Taints

image-20210902212209912

6.为node打污点对nodeSelector的影响度

[root@k8s110 pod]# vim 10-alpine.yaml 
[root@k8s110 pod]# 
[root@k8s110 pod]# cat 10-alpine.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: oldboyedu-linux76-2021-10
spec:
  # 指定调度到哪个node节点,无视污点(Taints)
  # nodeName: k8s112.oldboyedu.com
  # 通过node的标签选择器去选择节点,如果没有匹配的到则处于Pending
  # 如果node节点有符合的标签但存在污点,也无法完成调度!
  nodeSelector:
    school: oldboyedu
  containers:
    - name: oldboyedu-alpine
      image: k8s110.oldboyedu.com:5000/linux/alpine:latest
      ports:
        - containerPort: 8888
      args: ["sleep","300000"]
      imagePullPolicy: IfNotPresent
[root@k8s110 pod]# 

温馨提示:
    为了测试上面的案例,咱们可以对"k8s112.oldboyedu.com"和"k8s112.oldboyedu.com"打上相同的标签.

二.为Pod资源添加容忍度

1.为node打标签

kubectl label node k8s102.oldboyedu.com class=oldboyedu-linux
kubectl label node k8s103.oldboyedu.com class=oldboyedu-linux

2.为node打上污点

kubectl taint node k8s102.oldboyedu.com class=oldboyedu-linux:NoSchedule
kubectl taint node k8s103.oldboyedu.com class=oldboyedu-linux:NoSchedule

3.Pod配置容忍度(K8S 1.5版本并不适用!)

[root@k8s101.oldboyedu.com /oldboyedu/pods]# vim 01-nginx.yaml 
[root@k8s101.oldboyedu.com /oldboyedu/pods]# 
[root@k8s101.oldboyedu.com /oldboyedu/pods]# cat 01-nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: oldboyedu-nginx
  labels:
    app: web01
spec:
  tolerations:
    - key: "class"
      value: "oldboyedu-linux"
      effect: "NoSchedule"
  containers:
    - name: nginx
      image: k8s101.oldboyedu.com:5000/docker.io/nginx:1.13
      ports:
        - containerPort: 80
[root@k8s101.oldboyedu.com /oldboyedu/pods]# 

三.kubernetes的ConfigMap资源应用案例

1.ConfigMap概述

    创建ConfigMap资源后,数据实际会存储在Kubernetes集群中的ETCD数据库,然后通过创建Pod时引入该数据。

    应用场景:
        应用程序配置。

    ConfigMap支持两种数据类型:
        (1)键值对;
        (2)多行数据;

    Pod使用ConfigMap数据有两种方式:
        (1)变量注入;
        (2)数据卷挂载;

    推荐阅读:
        https://kubernetes.io/zh/docs/concepts/configuration/configmap/

2.创建ConfigMap资源

vim configmap-demo.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: database-config
data:
  # 我们可以基于键值("KEY:VALUE")的形式定义配置属性,下面我定义了两条数据,注意哈,VALUE的值无论是字母还是数字,都必须使用双引号括起来哟~
  name: "Jason Yin"
  age: "18"

  # 我们也可以基于多行数据的形式定义配置属性,即使用"|"来进行换行,这意味着下面的"mysql.properties"对应了多个属性。
  mysql.properties: |
    host: 172.200.1.201
    port: 3306
    socket: "/tmp/mysql.sock"
    user: "jason"
    password: "oldboyedu"

  # 注意哈,上面已经有3条数据了(其中两条基于"KEY:VALUE"形式),算上下面这一条多行数据的话,共计4条数据哟~
  redis.properties: |
    host: 172.200.1.203
    port: 6379
    requirepass: "oldboyedu"

3.创建Pod并引用ConfigMap资源中的配置

vim configmap-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: db-config-demo
  namespace: oldboyedu-configmap
spec:
  containers:
    - name: demo
      image: nginx:1.17
      env:
        # 注意哈,我们可以自定义变量哟
        - name: address
          value: "BeiJing"        
        - name: JAVA_HOME
          value: "/oldboyedu/softwares/jdk1.8/"

        # 我们的变量可以从Pod中获取
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace

        # 我们的变量也可以从ConfigMap中获取
        - name: pod-name
          valueFrom:
            configMapKeyRef:
              name: database-config
              key: name
        - name: pod-age
          valueFrom:
            configMapKeyRef:
              name: database-config
              key: age

      # 注意哈,此处我们指定了挂载卷信息
      volumeMounts:
      - name: pod-config  # 指定volumes的名称,必须在下面能找到同名的volumes哟~
        mountPath: "/config"  # 指定挂载点
        readOnly: true  # 注意哈,我们挂载是以只读的形式挂载的!

  # 我们在此处定义了卷组信息,以便于上面来进行引用哟~
  volumes:
  - name: pod-config
    configMap:
      name: database-config
      items:
      - key: "mysql.properties"  # 引用自"database-config"的ConfigMap资源定义的"mysql.properties"
        path: "pod-mysql.properties"  # 注意path只是对应的是文件名称哟~

温馨提示:
    需要咱们进入Pod中测试是否注入变量和挂载。

四.kubernetes的Secret资源应用案例

1.Secret概述

    与ConfigMap类似,区别在于Secret主要存储铭感数据,所有的数据要经过base64编码。

    但对于程序员而言,这依旧是明文数据,只不过想要拿到明文数据需要只需使用base64进行解码即可。

    如下所示,基于base64进行编码和解码只需一行命令就搞定了。
        [root@k8s103.oldboyedu.com ~]# echo -n "oldboyedu" | base64
        b2xkYm95ZWR1
        [root@k8s103.oldboyedu.com ~]# 
        [root@k8s103.oldboyedu.com ~]# echo -n "b2xkYm95ZWR1" | base64 -d
        oldboyedu
        [root@k8s103.oldboyedu.com ~]# 

    应用场景:
        多用于存储凭据信息。

    "kubectl create secret"支持常用的三种数据类型如下:(较ConfigMap支持的类型要多,我们可以理解ConfigMap支持的只是存储文本信息,对于存储仓库认证信息,TLS证书等ConfigMap均不支持,此时我们应该采用Secret哟~)
        (1)docker-registry(kubernetes.io/dockerconfigjson):
            存储镜像仓库认证信息。
        (2)generic(Opaque):
            存储密码,秘钥等。
        (3)tls(kubernetes.io/tls):
            存储TLS证书。

    除了上面提到的几种类型,还有其它几种内置的数据类型(我从官网摘抄如下表所示),推荐阅读:
        https://kubernetes.io/zh/docs/concepts/configuration/secret/

    温馨提示:
        [root@k8s103.oldboyedu.com ~]# kubectl get secret  # 如下所示,对于"kubernetes.io/service-account-token"这种类型是kubernetes预留的哟~
        NAME                  TYPE                                  DATA   AGE
        default-token-p4fw6   kubernetes.io/service-account-token   3      9d
        k8s-oldboyedu.com   kubernetes.io/tls                     2      26h
        [root@k8s103.oldboyedu.com ~]# 

image-20210902221446961

2.将用户名和密码使用"base64"进行编码

base64编码:
    [root@k8s103.oldboyedu.com ~]# echo -n "admin" | base64
    YWRtaW4=
    [root@k8s103.oldboyedu.com ~]# 
    [root@k8s103.oldboyedu.com ~]# echo -n "oldboyedu" | base64
    eWluemhlbmdqaWU=
    [root@k8s103.oldboyedu.com ~]# 

base64解码:
    [root@k8s103.oldboyedu.com ~]# echo "YWRtaW4=" | base64 -d
    admin
    [root@k8s103.oldboyedu.com ~]# 
    [root@k8s103.oldboyedu.com ~]# echo "eWluemhlbmdqaWU=" | base64 -d
    oldboyedu
    [root@k8s103.oldboyedu.com ~]# 

3.创建"Secret"资源

cat > secret-demo.yaml <<'EOF'
apiVersion: v1
kind: Secret
metadata:
  name: db-user-pass
type: Opaque  # 此处我们指定Secret资源的类型为"Opaque",通常用于存储密码,密钥等.
data:
  # 将编码后的值放到Secret资源的配置文件中
  username: YWRtaW4=
  password: eWluemhlbmdqaWU=
EOF

4.在Pod中引用"Secret"资源的配置信息

vim secret-pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
  name: db-secret-demo
spec:
  containers:
    - name: demo
      image: nginx:1.17
      env:
        # 我们的变量可以Secret资源获取哟
        - name: USER
          valueFrom:
            secretKeyRef:
              name: db-user-pass
              key: username
        - name: PASSWD
          valueFrom:
            secretKeyRef:
              name: db-user-pass
              key: password
      # 注意哈,此处我们指定了挂载卷信息
      volumeMounts:
      - name: pod-config  # 指定volumes的名称,必须在下面能找到同名的volumes哟~
        mountPath: "/config"  # 指定挂载点
        readOnly: true  # 注意哈,我们挂在是以只读的形式挂载的!

  # 我们在此处定义了卷组信息,以便于上面来进行引用哟~
  volumes:
  - name: pod-config
    secret:
      secretName: db-user-pass
      items:
      - key: "username"  # 引用自"database-config"的ConfigMap资源定义的"mysql.properties"
        path: "username_info"  # 注意path只是对应的是文件名称哟~

5.进入Pod中测试是否注入变量和挂载

测步骤略,现场演示。
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇