k8s编写配置文件解析

一、创建命名空间

1、编写yaml文件

vim  namespace.yaml

---

apiversion:  v1     #  api版本

kind:  Namespace    #  创建类型----(Namespace命名空间)

metadata:            #  元数据

    name:  ns-monitor    #  起个名字   (给元数据的名字)

    labels:                   #  标签

        name:  ns-monitor       #  标签的名字

2、创建资源

#    kubectl  apply  -f  namespace.yaml

回显  namespace/ns-monitor  created     (以创建成功)

#    kubectl  apply  -f  namespace.yaml  --validate       #  查看报错信息

3、查看所以命名空间里的资源

#    kubectl  get  namespace

4、查看命名空间内的某个资源

#    kubectl  get  namespace  ns-monitor

5、删除命名空间

#    kubectl  delete  -f  namespace.yaml

#    kubectl  delete  namespace  ns-monitor

二、创建第一个pod

1、编写pod的压目文件

vim  pod.yaml

---

apiversion:  v1

kind:  Pod

metadata:

    name:  website 

    labels:

        app:  website      #  打标签

spec:                       #  指定的意思(属性,定义的是Pod

    containers:       #   定义容器

         -  name:  test-website         #  容器的名字,自定义

             image:  daocloud.io/librery/nginx         #  镜像

             ports:

                 -  containerPort:  80            #  容器暴露的端口

nodeName:  k8s-node1                       #  指定node节点的名称

2、查看pod

#    kubectl  delete  pod  --all   //批量删除

#    kubectl  get  pods

回显:

名称      准备状态    pod的状态     pod的重启次数

NAME      READY   STATUS    RESTARTS   AGE     运行时间
website          1/1     Running             0          74s

3、查看pod运行在那台机器上

#    kubectl  get  pods   -o  wide

4、查看pod定义的详细信息

#    kubectl  get  pod  website  -o  yaml

-o:  output

yaml:  是yaml格式还是json格式

5、查看kubectl describe 支持查询Pod的状态和生命周期事件

#    kubectl  desribe  pod  website

各字段含义:

spec:指定资源的内容
Name: Pod的名称
Namespace: Pod的Namespace。
Image(s): Pod使用的镜像
Node: Pod所在的Node。

Start Time: Pod的起始时间
Labels: Pod的Label。
Status: Pod的状态。
Reason: Pod处于当前状态的原因。
Message: Pod处于当前状态的信息。
IP: Pod的PodIP
Replication Controllers: Pod对应的Replication Controller。
===============================
2.Containers:Pod中容器的信息
Container ID: 容器的ID
Image: 容器的镜像
Image ID:镜像的ID

State: 容器的状态
Ready: 容器的准备状况(true表示准备就绪)。
Restart Count: 容器的重启次数统计
Environment Variables: 容器的环境变量
Conditions: Pod的条件,包含Pod准备状况(true表示准备就绪)
Volumes: Pod的数据卷
Events: 与Pod相关的事件列表
=====
生命周期:指的是status通过# kubectl get pod
生命周期包括:running、Pending、completed、

6、实战

vim  pod.yaml

---

apiversion:  v1

kind:  Pod

metadata:

    name:  tomcat

    labels:

        app:  tomcat      #  打标签

spec:                       #  指定的意思(属性,定义的是Pod

    containers:       #   定义容器

         -  name:  test- tomcat       #  容器的名字,自定义

             image:  daocloud.io/librery/  tomcat:8       #  镜像

             ports:

                 -  containerPort:  8080            #  容器暴露的端口

nodeSelector:                                        #  指定标签

    kubernetes.io/hostname:  k8s-node1

7、域名解析

上面省略

spec:
  hostAliases:
  - ip: "k8s-node1的IP"       #自定义    给哪个ip做解析。实验环境下这个ip自定义的
    hostnames:
    - "foo.remote"         #自定义   解析的名字。用引号引起来可以写多个
    - "bar.remote"

  containers:
    - name: test-tomcat
      image: daocloud.io/library/tomcat:8
      ports:
        - containerPort: 8080

创建

kubectl  exec  -it  名字  /bin/bash

cat /etc/hosts

8、创建共享名称空间

spec:
  shareProcessNamespace: true  #共享进程名称空间
  containers:
    - name: test-web
      image: daocloud.io/library/nginx

      ports:
        - containerPort: 80
    - name: busybos
      image: daocloud.io/library/busybox
      stdin: true
      tty: true

解释:

定义了两个容器:
一个 nginx 容器
一个开启了 tty 和 stdin 的 busybos 容器

可以直接认为 tty 就是 Linux 给用户提供的一个常驻小程序,用于接收用户的标准输入,返回操作系统的标准输出。为了能够在 tty 中输入信息,需要同时开启 stdin(标准输入流)。

、Pod 中的容器要共享宿主机的 Namespace,也一定是 Pod 级别的定义

---
apiVersion: v1
kind: Pod
metadata:
  name: website
  labels:
    app: website
spec:
  hostNetwork: true  #共享宿主机网络
  hostIPC: true  #共享ipc通信
  hostPID: true  #共享宿主机的pid

  containers:
    - name: test-web
      image: daocloud.io/library/nginx
      ports:
        - containerPort: 80
    - name: busybos
      image: daocloud.io/library/busybox
      stdin: true
      tty: true

定义了共享宿主机的 Network、IPC 和 PID Namespace。这样,

此 Pod 里的所有容器,会直接使用宿主机的网络、直接与宿主机进行 IPC 通信、看到宿主机里正在运行的所有进程。

---
apiVersion: v1
kind: Pod
metadata:
 name: lifecycle-demo
spec:
 containers:
 - name: lifecycle-demo-container
   image: daocloud.io/library/nginx
   lifecycle:       #    生命周期 感知组件
     postStart:  #容器启动之后

       exec: 
         command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
     preStop:  #容器关闭之前
       exec: 
         command: ["/usr/sbin/nginx","-s","quit"]

验证:

kubectl  get  pod  -o  wide    #  查看 lifecycle-demo在k8s-node那个上面运行,在k8s-node1上运行

k8s-node1 ~ ] #  docker  exec  -it   lifecycle-demo(镜像的IP或名字)  /bin/bs

k8s-node1 ~ ] #  cat  /usr/share/message

回显: Hello from the postStart handler

二、Secret

1、Secret 对象要求这些数据必须是经过 Base64 转码的,以免出现明文密码的安全隐患。

2、生产环境中,需要在 Kubernetes 中开启 Secret 的加密插件,增强数据的安全性。

所有Pod会默认使用这个Secret与apiserver通信

1、用yaml创建Secret

base64解码,明文显示容易被别人发现,这里先转码。

echo  -n  'admin'  |  base64d     回显: YWRtaW4=

echo  -n  '1f2d1e2e67df(密码)'    |    nase64      回显: MWYyZDFlMmU2N2Rm 

vim secret.yaml

---
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque      #   模糊
data:                   #  Secret 对象的 data 字段指定的 Key。

  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

vim pod_use_secret.yaml

----
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: testredis
    image: daocloud.io/library/redis
    volumeMounts:    #挂载一个卷
    - name: foo     #这个名字需要与定义的卷的名字一致
      mountPath: "/etc/foo"  #挂载到容器里哪个目录下,随便写
      readOnly: true
 
volumes:     #数据卷的定义
  - name: foo   #卷的名字这个名字自定义
    secret:    #卷是直接使用的secret。
      secretName: mysecret   #调用刚才定义的secret

      items:   #定义一个items
        - key: username   #将那个key重新定义到那个目录下
           path: my-group/my-username  #相对路径,相对于/etc/foo的路径

username被映射到了文件/etc/foo/my-group/my-username而不是/etc/foo/username

创建:
[root@kub-k8s-master prome]# kubectl apply -f pod_use_secret.yaml 
回显:    pod/mypod created
[root@kub-k8s-master prome]# kubectl exec -it mypod /bin/bash
root@mypod:/data# cd /etc/foo/
root@mypod:/etc/foo# ls
回显:   password  username
root@mypod:/etc/foo# cat password 
回显:   1f2d1e2e67df

2、被挂载的secret内容自动更新

1.设置base64加密
# echo qianfeng | base64
回显:cWlhbmZlbmcK
2.将admin替换成qianfeng
# vim secret.yml
---
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque   # 模糊
data:
  username: cWlhbmZlbmcK   #修改为qianfeng的base64加密后的
  password: MWYyZDFlMmU2N2Rm

1.创建
# kubectl apply -f secret.yml 
回显:Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
secret/mysecret configured
2.连接pod容器    (prome自己创建的文件名称)
[root@kub-k8s-master prome]# kubectl exec -it mypod /bin/bash
root@mypod:/data# cd /etc/foo/my-group
root@mypod:/etc/foo/my-group# ls
回显:my-username
root@mypod:/etc/foo/my-group# cat my-username 
回显:qianfeng

3、以环境变量的形式使用Secret

[root@kub-k8s-master prome]# kubectl delete -f pod_use_secret.yaml
pod "mypod" deleted
[root@kub-k8s-master prome]# vim pod_use_secret.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: testredis
    image: daocloud.io/library/redis
    env:  #定义环境变量
     - name: SECRET_USERNAME  #创建新的环境变量名称
       valueFrom:
        secretKeyRef:     #调用的key是什么
         name: mysecret       #变量的值来自于mysecret
         key: username       #username里面的值

      envFrom:    #自定义环境变量
        - configMapRef:     #单曲变量
           name: config-map
 restartPolicy: Never     # 重启策略

2.创建使用secret的pod容器
[root@kub-k8s-master prome]# kubectl apply -f pod_use_secret.yaml 
回显:pod/mypod created
3.连接
[root@kub-k8s-master prome]# kubectl exec -it mypod /bin/bash 
root@mypod:/data# echo $SECRET_USERNAME   #打印一下定义的变量
qianfeng

三、ConfigMap 与 Secret 类似,用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中。

ConfigMap 保存的是不需要加密的、应用所需的配置信息。

1、创建ConfigMapp

#     kubectl  create  configmap  test-configmap  --from-literal=user=admin  --from-literal=pass=1122334

# kubectl get configmap test-configmap -o yaml
apiVersion: v1
data:
  pass: "1122334"
  user: admin
。。。。

2、通过指定文件创建

 vim app.properties
property.1 = value-1
property.2 = value-2
property.3 = value-3
property.4 = value-4
[mysqld]
!include /home/wing/mysql/etc/mysqld.cnf
port = 3306
socket = /home/wing/mysql/tmp/mysql.sock
pid-file = /wing/mysql/mysql/var/mysql.pid
basedir = /home/mysql/mysql
datadir = /wing/mysql/mysql/var

[root@kub-k8s-master prome]# kubectl create configmap test-config2 --from-file=app.properties 

[root@kub-k8s-master prome]# kubectl get configmap test-config2 -o yaml
apiVersion: v1
data:
  app.properties: |
    property.1 = value-1
    property.2 = value-2
    property.3 = value-3
    property.4 = value-4

    [mysqld]
    !include /home/wing/mysql/etc/mysqld.cnf
    port = 3306
    socket = /home/wing/mysql/tmp/mysql.sock
    pid-file = /wing/mysql/mysql/var/mysql.pid
    basedir = /home/mysql/mysql
    datadir = /wing/mysql/mysql/var
kind: ConfigMap
metadata:
  creationTimestamp: "2019-10-21T08:01:43Z"     #  创建时间戳
  name: test-config2
  namespace: default
  resourceVersion: "188765"          #  资源的版本
  selfLink: /api/v1/namespaces/default/configmaps/test-config2
  uid: 790fca12-3900-4bf3-a017-5af1070792e5

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值