0
点赞
收藏
分享

微信扫一扫

产品入门第四讲:Axure动态面板

半秋L 2023-12-18 阅读 50

目录

Yaml语法解析

Pod

 pod是如何被创建的

1.创建一个pod

2.创建一个多容器pod

进入容器

3.配置节点标签

4.Pod容器的交互

4.1创建pod,并做本地解析

 4.2pod共享进程

 4.3pod共享宿主机namespace

 5.钩子函数lifecycle

基础指令

Yaml语法解析

YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称"一种人性化的数据格式语言"。

 创建命名空间

vim test.yaml
apiVersion: v1
kind: Namespace
metadata:
      name: aren

 kubectl apply -f test.yaml

# 如果通过命令行创建
$ kubectl create namespace webserver
# 删除名称空间[注意,这将删除名称空间下的所有资源]
$ kubectl delete namespace webserver

Pod

 pod是如何被创建的

  • step1: kubectl 向 k8s api server 发起一个create pod 请求

  • step2: k8s api server接收到pod创建请求后,不会去直接创建pod;而是生成一个包含创建信息的yaml。

  • step3: apiserver 将刚才的yaml信息写入etcd数据库。

  • step4: scheduler 查看 k8s api,判断:pod.spec.Node == null,若为null,表示这个Pod请求是新来的,需要创建;因此先进行调度计算,找到最适合的node。并更新数据库

  • step5: node节点上的Kubelet通过监听数据库更新,发现有新的任务与自己的node编号匹配,则进行任务创建

1.创建一个pod

创建pod模板

kubectl  run    [pod名称]    --image=mysql --namespace=aren  --port=3306 --dry-run -o yaml
[root@kube-master kubernetes]#  vim mysql.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mysql
  namespace: aren
  labels:
    name: mysql
spec:
  containers:
  - name: mysql
    image: mysql:5.7
    ports:
      - containerPort: 3306
    env:
      - name: MYSQL_ROOT_PASSWORD
        value: "123456"
      - name: MYSQL_DATABASE
        value: "test"

2.创建一个多容器pod

[root@kube-master kubernetes]# vim test.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: aren
  labels:
    name: nginx
spec:
  restartPolicy: OnFailure
  containers:
   - name: centos
     imagePullPolicy: IfNotPresent
     image: 10.36.192.206:8088/library/centos:7.9.2009
     command: ["tail","-f","/dev/null"]
   - name: nginx
     imagePullPolicy: IfNotPresent
     image: 10.36.192.206:8088/library/nginx:1.20.2
     resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
     ports:
      - containerPort: 80
# nodeName: kube-node1
  nodeSelector:
    kubernetes.io/hostname: kube-node2


kubectl apply -f test.yaml


进入容器

 -n 指定命名空间 -c 指定pod中的容器

[root@kube-master ~]# kubectl  exec -it -n aren nginx -c centos /bin/bash

3.配置节点标签

添加标签
kubectl label nodes node3 name=value
删除标签
kubectl label nodes node3 name-

[root@kube-master ~]# kubectl  label nodes  kube-node1  type=cpus

 可以通过  nodeSelector:(节点选择器:可以指定node的标签,查看标签指令:)

nodeSelector:
    type=cpus

4.Pod容器的交互

4.1创建pod,并做本地解析
[root@kube-master ~]# vim host-alias.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: centos
  name: centos
  namespace: default
spec:
  containers:
  - image: 10.36.192.206:8088/library/centos:7.9.2009
    name: centos
    command: 
        - "tail"
        - "-f"
        - "/dev/null"
  hostAliases: 
        - ip: "192.168.134.166"
          hostnames: 
             - "kube-node1"
        - ip: "192.168.134.163"
          hostnames:
               - "kube-node2"


# kubectl   apply -f host-alisa.yaml
# 字段解析
command:
启动容器时执行的指令,类似于docker run -it 镜像 tail -f /dev/null

hostAliases:
在容器中的/etc/hosts文件中配置本地解析

进入容器可以看到

 4.2pod共享进程

shareProcessNamespace: true  #共享进程名称空间

[root@kube-master ~]# vim pod.yaml

---
apiVersion: v1
kind: Pod
metadata:
  name: website
  labels:
    app: website
  namespace: aren
spec:
  shareProcessNamespace: true
  containers:
    - name: test-web
      image: 10.36.192.206:8088/library/nginx:1.20.2
      ports:
        - containerPort: 80
    - name: busybox
      image: 10.36.192.206:8088/library/busybox
      stdin: true
      tty: true


 # kubectl  apply -f pod.yaml

 可以在busybbox中看到nginx的进程

 4.3pod共享宿主机namespace

定义了共享宿主机的 Network、IPC 和 PID Namespace。这样,此 Pod 里的所有容器,会直接使用宿主机的网络、直接与宿主机进行 IPC 通信、看到宿主机里正在运行的所有进程。

[root@kube-master ~]# vim pod1.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: website
  labels:
    app: website
spec:
  hostNetwork: true 
  hostIPC: true
  hostPID: true
  containers:
    - name: test-web
      image: 10.36.192.206:8088/library/nginx:1.20.2
      ports:
        - containerPort: 80
    - name: busybox
      image: 10.36.192.206:8088/library/busybox
      stdin: true
      tty: true

# kubectl apply -f pod1.yaml

查看详信息 ,发现与kube-node1共享

 5.钩子函数lifecycle

 实例

[root@kube-master ~]# vim lifecycle.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-lifecycle
  namespace: default
  labels:
    app: nginx
spec:
  containers:
    - name: nginx-lifecycle
      image: nginx:1.16.1
      ports:
        - containerPort: 80
          protocol: TCP
      lifecycle:
        postStart:
          exec:
            command: ["/bin/sh", "-c", "echo '<h1>this is a nginx-lifecycle test page</h1>' > /usr/share/nginx/html/index.html"]
        preStop:
          exec:
            command: ["/bin/sh", "-c", "echo 'stop nginx 30 ' > /usr/share/nginx/html/index.html; sleep 30"]



# kubectl  apply -f lifecycle.yaml 

查看


[root@kube-master kubernetes]# kubectl  get pod -o wide
NAME              READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
nginx-lifecycle   1/1     Running   0          10s   10.244.9.98   kube-node1   <none>           <none>
[root@kube-master kubernetes]# curl 10.244.9.98 
<h1>this is a nginx-lifecycle test page</h1>
#删除pod
[root@kube-master kubernetes]#kubectl  delete pod nginx-lifecycle -n default



[root@kube-master ~]#  curl 10.244.9.98
stop nginx 30 
举报

相关推荐

0 条评论