kubernetes--资源对象文件和资源监控组件

 

 

 

 

 

 ​​​​

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kubernetes

资源对象文件

模板与帮助信息

# 获取 Pod 模板
[root@master ~]# kubectl run myweb --image=myos:nginx --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: myweb
  name: myweb
spec:
  containers:
  - image: myos:nginx
    name: myweb
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

# 获取资源对象模板
[root@master ~]# kubectl create namespace work --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: work
spec: {}
status: {}

# 查询帮助信息
[root@master ~]# kubectl explain Pod.spec.restartPolicy
KIND:     Pod
VERSION:  v1

FIELD:    restartPolicy <string>

DESCRIPTION:
     Restart policy for all containers within the pod. One of Always, OnFailure,
     Never. Default to Always. More info:
     https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy

     Possible enum values:
     - `"Always"`
     - `"Never"`
     - `"OnFailure"`

资源对象文件

[root@master ~]# mkdir app
[root@master ~]# cd app
[root@master app]# vim httpd.yaml 
---
kind: Pod
apiVersion: v1
metadata:
  name: httpd
spec:
  containers:
  - name: httpd
    image: myos:httpd
    
[root@master app]# vim nginx.yaml 
---
kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: myos:nginx

[root@master app]# vim phpfpm.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: php
spec:
  containers:
  - name: php
    image: myos:php-fpm


管理资源对象管理

[root@master app]# ls
httpd.yaml  nginx.yaml  phpfpm.yaml
# 使用资源对象文件创建应用
[root@master ~]# kubectl apply -f httpd.yaml
pod/httpd created
[root@master app]# kubectl apply -f nginx.yaml -f phpfpm.yaml
pod/nginx created
pod/php created

# 删除应用
[root@master app]# kubectl delete -f /root/app/
pod "httpd" deleted
pod "nginx" deleted
pod "php" deleted

# 合并资源对象文件
[root@master app]# cat nginx.yaml >>app.yaml
[root@master app]# cat phpfpm.yaml >>app.yaml

# 创建资源对象
[root@master ~]# kubectl apply -f app.yaml
pod/nginx created
pod/php created

# 删除资源对象
[root@master ~]# kubectl delete -f app.yaml
pod "nginx" deleted
pod "php" deleted

自定义命令

[root@master app]# ls
httpd.yaml  nginx.yaml  phpfpm.yaml
# 使用资源对象文件创建应用
[root@master ~]# kubectl apply -f httpd.yaml
pod/httpd created
[root@master app]# kubectl apply -f nginx.yaml -f phpfpm.yaml
pod/nginx created
pod/php created

# 删除应用
[root@master app]# kubectl delete -f /root/app/
pod "httpd" deleted
pod "nginx" deleted
pod "php" deleted

# 合并资源对象文件
[root@master app]# cat nginx.yaml >>app.yaml
[root@master app]# cat phpfpm.yaml >>app.yaml

# 创建资源对象
[root@master ~]# kubectl apply -f app.yaml
pod/nginx created
pod/php created

# 删除资源对象
[root@master ~]# kubectl delete -f app.yaml
pod "nginx" deleted
pod "php" deleted

容器保护策略

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mycmd
spec:
  restartPolicy: Never  # 配置保护策略
  containers:
  - name: linux
    image: myos:8.5
    command: ["sleep"]
    args: ["30"]

[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted
[root@master ~]# kubectl apply -f mycmd.yaml
pod/mycmd created
[root@master ~]# kubectl get pods -w
NAME    READY   STATUS      RESTARTS     AGE
mycmd   1/1     Running     0            4s
mycmd   0/1     Completed   0            31s

宽限期策略

[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted
[root@master ~]# kubectl apply -f mycmd.yaml
pod/mycmd created
[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mycmd
spec:
  terminationGracePeriodSeconds: 0  # 设置宽限期
  restartPolicy: Never
  containers:
  - name: linux
    image: myos:8.5
    command: ["sleep"]
    args: ["30"]

[root@master ~]# kubectl apply -f mycmd.yaml
pod/mycmd created
[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted

最大生命周期

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mycmd
spec:
  terminationGracePeriodSeconds: 0
  activeDeadlineSeconds: 60  # 可以执行的最大时长
  restartPolicy: Never
  containers:
  - name: linux
    image: myos:8.5
    command: ["sleep"]
    args: ["300"]

[root@master ~]# kubectl delete -f mycmd.yaml
pod "mycmd" deleted
[root@master ~]# kubectl apply -f mycmd.yaml
pod/mycmd created

[root@master ~]# kubectl get pods -w
mycmd   1/1     Running             0          1s
mycmd   1/1     Running             0          60s
mycmd   0/1     Error               0          64s

Pod嵌入脚本

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mycmd
spec:
  terminationGracePeriodSeconds: 0
  restartPolicy: Always
  containers:
  - name: linux
    image: myos:8.5
    command: ["/bin/bash"]
    args:
    - -c
    - |
      while sleep 5;do
        echo "hello world."
      done

[root@master ~]# kubectl apply -f mycmd.yaml 
pod/mycmd created
[root@master ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
mycmd   1/1     Running   0          3s
[root@master ~]# kubectl logs mycmd 
hello world.
hello world.
hello world.

案例2答案

---
kind: Pod
apiVersion: v1
metadata:
  name: mymem
spec:
  containers:
  - name: linux
    image: myos:8.5
    command: ["/bin/bash"]
    args:
    - -c
    - |
      while sleep 5;do
          use=$(free -m |awk '$1=="Mem:"{print $3}')
          if  (( ${use} < 1000 ));then
              echo -e "\x1b[32mINFO:\x1b[39m running normally"
          else
              echo -e "\x1b[31mWARN:\x1b[39m high memory usage"
          fi
      done

多容器 Pod

[root@master ~]# vim mynginx.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mynginx
spec:
  terminationGracePeriodSeconds: 0
  restartPolicy: Always
  containers:
  - name: nginx
    image: myos:nginx
  - name: php
    image: myos:php-fpm

[root@master ~]# kubectl apply -f mynginx.yaml 
pod/mynginx created
[root@master ~]# kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mynginx   2/2     Running   0          3s

管理多容器 Pod

  • 受到多容器影响的命令: ["cp", "logs", "exec"]
  • [root@master ~]# echo "hello world" >hello.html
    [root@master ~]# kubectl cp hello.html mynginx:/usr/local/nginx/html/ -c nginx
    [root@master ~]# kubectl exec mynginx -c php -- ps
        PID TTY          TIME CMD
          1 ?        00:00:00 php-fpm
          7 ?        00:00:00 ps
    [root@master ~]# kubectl logs mynginx -c nginx
    [root@master ~]#

排错案例3

[root@master ~]# vim web2.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: web2
spec:
  containers:
  - name: httpd
    image: myos:httpd
  - name: nginx
    image: myos:nginx

[root@master ~]# kubectl apply -f web2.yaml 
pod/web2 created
[root@master ~]# kubectl get pods web2
NAME   READY   STATUS    RESTARTS     AGE
web2   1/2     Error     1 (4s ago)   8s

资源监控组件

配置授权令牌

[root@master ~]# echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
[root@master ~]# systemctl restart kubelet
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR            REQUESTEDDURATION   CONDITION
csr-2hg42   14s   kubernetes.io/kubelet-serving   system:node:master   <none>              Pending
[root@master ~]# kubectl certificate approve csr-2hg42
certificatesigningrequest.certificates.k8s.io/csr-2hg42 approved
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR            REQUESTEDDURATION   CONDITION
csr-2hg42   28s   kubernetes.io/kubelet-serving   system:node:master   <none>              Approved,Issued

安装插件 metrics

  • 导入插件镜像到私有仓库 plugins/metrics
  • [root@master metrics]# docker load -i metrics-server.tar.xz
    [root@master metrics]# docker images|while read i t _;do
        [[ "${t}" == "TAG" ]] && continue
        [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
        docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
        docker push harbor:443/plugins/${i##*/}:${t}
        docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
    done
  • 安装插件服务
  • [root@master metrics]# sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' components.yaml
    140:     image: harbor:443/plugins/metrics-server:v0.6.2
    [root@master metrics]# kubectl apply -f components.yaml
    [root@master metrics]# kubectl -n kube-system get pods -l k8s-app=metrics-server
    NAME                             READY   STATUS    RESTARTS   AGE
    metrics-server-ddb449849-c6lkc   1/1     Running   0          64s
    [root@master metrics]# kubectl top nodes
    NAME        CPU(cores)    CPU%         MEMORY(bytes)     MEMORY%     
    master      99m           4%           1005Mi            27%         
    node-0001   <unknown>     <unknown>    <unknown>        <unknown>
    node-0002   <unknown>     <unknown>    <unknown>        <unknown>
    node-0003   <unknown>     <unknown>    <unknown>        <unknown>
    node-0004   <unknown>     <unknown>    <unknown>        <unknown>
    node-0005   <unknown>     <unknown>    <unknown>        <unknown>

计算节点签发证书

#--------------- 在所有计算节点配置证书 -----------------
[root@node ~]# echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
[root@node ~]# systemctl restart kubelet
#--------------- 在 master 签发证书 -------------------
[root@master ~]# kubectl certificate approve $(kubectl get csr -o name)
certificatesigningrequest.certificates.k8s.io/csr-2hg42 approved
certificatesigningrequest.certificates.k8s.io/csr-9gu29 approved
certificatesigningrequest.certificates.k8s.io/csr-xhp83 approved
certificatesigningrequest.certificates.k8s.io/csr-8k69w approved
certificatesigningrequest.certificates.k8s.io/csr-t8799 approved
certificatesigningrequest.certificates.k8s.io/csr-69qhz approved
[root@master ~]# kubectl get certificatesigningrequests 
NAME        AGE   SIGNERNAME                      REQUESTOR        REQUESTEDDURATION   CONDITION
csr-2hg42   14m   kubernetes.io/kubelet-serving   master           <none>              Approved,Issued
csr-9gu29   28s   kubernetes.io/kubelet-serving   node-0001        <none>              Approved,Issued
csr-xhp83   21s   kubernetes.io/kubelet-serving   node-0002        <none>              Approved,Issued
csr-69qhz   15s   kubernetes.io/kubelet-serving   node-0003        <none>              Approved,Issued
csr-t8799   15s   kubernetes.io/kubelet-serving   node-0004        <none>              Approved,Issued
csr-8k69w   15s   kubernetes.io/kubelet-serving   node-0005        <none>              Approved,Issued

查看节点资源指标

# 获取资源指标有延时,等待 15s 即可查看
[root@master ~]# kubectl top nodes
NAME        CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master      83m          4%     1789Mi          50%       
node-0001   34m          1%     747Mi           20%       
node-0002   30m          1%     894Mi           24%       
node-0003   39m          1%     930Mi           25%       
node-0004   45m          2%     896Mi           24%       
node-0005   40m          2%     1079Mi          29%

监控Pod资源指标

  • 拷贝 memtest.py 到 master
  • [root@ecs-proxy 5]# rsync -av public/memtest.py 192.168.1.50:./
    #----- 增加执行权限 -----
    [root@master ~]# vim memtest.py
    1: #!/usr/libexec/platform-python
    [root@master ~]# chmod 0555 memtest.py

    创建 Pod 对象

  • [root@master ~]# vim myhttp.yaml
    ---
    kind: Pod
    apiVersion: v1
    metadata:
      name: myhttp
    spec:
      containers:
      - name: apache
        image: myos:httpd
    
    [root@master ~]# kubectl apply -f myhttp.yaml
    pod/myhttp created

  • 查看 Pod 资源指标
  • [root@master ~]# kubectl top pods
    NAME     CPU(cores)   MEMORY(bytes)   
    myhttp   1m           6Mi 
    
    # 测试消耗 CPU 资源
    [root@master ~]# kubectl exec -it myhttp -- /bin/bash
    [root@myhttp html]# awk 'BEGIN{while(1){}}'
    
    #--------------- 在另一个终端查看------------------------
    [root@master ~]# kubectl top pods
    NAME     CPU(cores)   MEMORY(bytes)   
    myhttp   1012m        7Mi 
    
    # 测试消耗内存资源
    [root@master ~]# kubectl cp memtest.py myhttp:/usr/bin/
    [root@master ~]# kubectl exec -it myhttp -- memtest.py 2500
    use memory success
    press any key to exit :
    #--------------- 在另一个终端查看------------------------
    [root@master ~]# kubectl top pods
    NAME     CPU(cores)   MEMORY(bytes)   
    myhttp   1061m        2513Mi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值