Kubernetes学习日志(三)

前言

本文记录了Kubernetes的资源对象文件的学习过程

为了方便写yaml文件,一般会设置vim风格:
set ai 设置自动缩进
set ts=2 设置tab缩进两个空格
set et 将tab缩进的空格转换为对应个数的空格

一、资源对象文件

1、模板与帮助信息

资源对象文件的优势:
命令无法实现的高级复杂功能资源对象文件可以
某些资源对象无法使用命令创建
资源对象文件不像命令,即方便管理,保存,也可以追溯历史记录

资源对象模板的生成

资源对象Pod模板使用run生成, 其他使用create生成,–dry-run=client -o yaml 是生成模板命令。

kubectl run  --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: {}

获取资源对象模板

kubectl create namespace work --dry-run=client -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: null
  name: work
spec: {}
status: {}

查看帮助文档

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"`

资源对象文件

mkdir app
cd app
# vim nginx.yaml 
---
kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: myos:nginx
###
# vim phpfpm.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: php
spec:
  containers:
  - name: php
    image: myos:php-fpm
###

管理资源对象文件

# 使用镜像资源文件创建应用
kubectl apply -f nginx.yml -f phpfpm.yml

# 删除应用(使用目录删除,相当与读取资源文件删除Pod)
kubectl delete -f /root/app

# 合并资源对象文件
cat nginx.yml >> app.yml
cat phpfpm.yml >> app.yml

# 创建资源文件对象
kubectl apply -f app.yml

# 删除资源对象文件(直接使用yml文件删除)
kubectl delete -f app.yml

自定义命令
自定义命令设置在command字段下,参数写在args字段下

# vim mycmd.yml

---
kind : Pod
apiVersion : v1
metadata :
  name : mycmd
spec :
  containers :
  - name : linux
    image : myos:8.5
    command : ["sleep"] # 自定义命令
    args : ["30"] # 自定义命令参数
###
kubectl apply -f mycmd.yml
kubectl get pods -w

容器保护策略
Pod会根据策略决定容器结束后是否重启,Always重启,Never不重启,OnFailure失败就重启

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

宽限期策略
宽限期避免服务突然中断,造成的事物不一致(默认30s不等待设置为0)

# 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"]

最大生命周期
允许Pod运行最大时常,时间到期后会向Pod发送signal,如果Pod无法结束就会强制关闭,并设置为Error

# 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"]

Pod嵌入脚本

  • -c从字符串中读取数据
  • | 保持字符串原有数据 > 将不同行数据以空格连接在同一行
# 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

多容器 Pod
同一个Pod共享网络和IP及权限
同一个Pod共享主机名
同一个Pod共享存储设备
同一个Pod内容器不能使用同个端口,不能挂载同一个路径,不能使用相同环境变量

# 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

管理多容器 Pod
受到多容器影响的命令: [“cp”, “logs”, “exec”]

echo "hello world" >hello.html
kubectl cp hello.html mynginx:/usr/local/nginx/html/ -c nginx
kubectl exec mynginx -c php -- ps
kubectl logs mynginx -c nginx

二、资源监控组件

安装部署程序后,必须要了解应用程序在部署后的性能和资源使用情况,可以通过检测Pod容器或节点来了解整个集群的情况
kubernetes的Metrics-server组件提供有关节点和Pod的资源使用情况的信息,包括CPU和内存的指标,将Metrics-server部署到集群中,就可以查询并使用这些信息管理应用及服务
Metrics-server为调度器,弹性控制器以及Dashboard等ui组件提供数据来源
安装条件:
kube-apiserver必须启用聚合服务,或使用kube-proxy代理转发
节点必须启用身份验证和授权,kubelet证书需要由集群证书颁发机构签名
Metrics Server使用443、4443端口,所有节点上Kubelet必须能够访问该端口
配置授权令牌

启用引导令牌,并签发
echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
systemctl restart kubelet
kubectl get certificatesigningrequests 
kubectl certificate approve csr-2hg42
kubectl get certificatesigningrequests 

安装插件 metrics

 docker load -i metrics-server.tar.xz
 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
sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' components.yaml
140:     image: harbor:443/plugins/metrics-server:v0.6.2
kubectl apply -f components.yaml
kubectl -n kube-system get pods -l k8s-app=metrics-server

计算节点签发证书

# 查看节点资源指标
kubectl top nodes
#--------------- 在所有计算节点配置证书 -----------------
echo 'serverTLSBootstrap: true' >>/var/lib/kubelet/config.yaml
systemctl restart kubelet
#--------------- 在 master 签发证书 -------------------
kubectl certificate approve $(kubectl get csr -o name)
kubectl get certificatesigningrequests 

查看节点资源指标
#获取资源指标有延时,等待 15s 即可查看
kubectl top nodes
监控资源指标
CPU资源单位:
CPU资源约束和请求以毫核(m)为单位,1m是最小调度单位,CPU一个核心约为1000m
memory资源类型:
以字节为单位,可以使用E,P,T,G,M,k
也可以使用对应的2的幂数Ei,Pi,Ti,Gi,Mi,Ki
eg:1k=1000
1ki=1024

# vim mylinux.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mylinux
spec:
  containers:
  - name: linux
    image: myos:8.5
    command: ["awk", "BEGIN{while(1){}}"]

kubectl apply -f mylinux.yaml

查看 Pod 资源指标

# 查看 CPU 资源消耗
kubectl top pods
# 测试消耗内存资源
kubectl cp memtest.py mylinux:/usr/bin/
kubectl exec -it mylinux -- memtest.py 2500
#--------------- 在另一个终端查看------------------------
kubectl top pods
# 实验完成以后清空所有容器
kubectl delete pods --all
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值