kubernetes

2023-11-12

Deploy资源

spec:
  progressDeadlineSeconds: 600 # 等待多少秒才能确定Deployment进程是卡住的
  replicas: 1
  revisionHistoryLimit: 10 #指定保留多少旧的 ReplicaSet
  selector:
    matchLabels:
      k8s.kuboard.cn/layer: monitor
      k8s.kuboard.cn/name: monitor-grafana
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        k8s.kuboard.cn/layer: monitor
        k8s.kuboard.cn/name: monitor-grafana
    spec:
      containers:
        - env:
            - name: POD_NAME
              valueFrom:
                fieldRef: #resourceFieldRef去获取容器的资源请求和资源限制信息
                  fieldPath: metadata.name #pod的name做为环境变量传入pod中
                  #fieldPath: metadata.labels['env']
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          image: 'grafana/grafana:7.0.1'
          imagePullPolicy: IfNotPresent
          securityContext:
            readOnlyRootFilesystem: true #以只读方式访问根文件系统
          name: grafana
          ports:
            - containerPort: 3000
              protocol: TCP
          terminationMessagePath: /dev/termination-log #容器中止消息,可通过"{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}"查看
          terminationMessagePolicy: File #仅从终止消息文件检索终止消息
          volumeMounts:
            - mountPath: /var/lib/grafana
              name: grafana-storage
              subPath: grafana
      dnsPolicy: ClusterFirst #集群dns优先
      priorityClassName: system-node-critical #优先级调度
      nodeSelector:
        node-role.kubernetes.io/master: ''
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: #可指定容器或应用所有pod
        #privileged: true #特权模式
        runAsNonRoot: false
        runAsUser: 0 #userid
        #fsGroup #volume FSGroup
        allowPrivilegeEscalation: false #限制 root 账号特权级提升
        capabilities:
           add:
             - NET_BIND_SERVICE
           drop:
             - all
      #https://www.qikqiak.com/post/capabilities-on-k8s/
      terminationGracePeriodSeconds: 30
      tolerations:
        - effect: NoSchedule
          key: node-role.kubernetes.io/master
      volumes:
        - name: grafana-storage
          persistentVolumeClaim:
            claimName: kubernetes-grafana-pvc

service资源

修改nodeport的范围

vim  /etc/kubernetes/apiserver
最后一行KUBE_API_ARGS="--service-node-port-range=3000-50000"

命令行创建svc资源

kubectl expose rc nginx --type=NodePort --port=80
#为nginx的rc暴露端口,nodeport指定不了,--cluster-ip=指定vip地址

deployment资源

有rc在滚动升级之后,会造成服务访问中断,于是k8s引入了deployment资源
启动deploy时会启动一个rs(rc的升级版),rs会启动pod,deploy的配置文件变更时会启动新的rs

命令行

创建

kubectl run   nginx  --image=10.0.0.11:5000/nginx:1.13 --replicas=3 --record
                                                                      #后续显示版本信息

升级

kubectl set image deployment nginx nginx=10.0.0.11:5000/nginx:1.15
#交互式升级直接edit修改镜像版本

查看所有历史版本

kubectl rollout history deployment nginx

回滚到上一个版本

kubectl rollout undo deployment nginx

回滚到指定版本

kubectl rollout undo deployment nginx --to-revision=2

健康检查

探针的种类
livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器
readinessProbe:可用性检查,周期性检查服务是否可用,不可用将从service的endpoints中移除

探针的检测方法
exec:执行一段命令 返回值为0, 非0
httpGet:检测某个 http 请求的返回状态码 2xx,3xx正常, 4xx,5xx错误
tcpSocket:测试某个端口是否能够连接

liveness探针的exec使用

apiVersion: v1
kind: Pod
metadata:
  name: exec
spec:
  containers:
    - name: nginx
      image: 10.0.0.11:5000/nginx:1.13
      ports:
        - containerPort: 80
      args: #容易被覆盖,command不容易被覆盖
        - /bin/sh
        - -c
        - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
      livenessProbe:
        exec:
          command:
            - cat
            - /tmp/healthy
        initialDelaySeconds: 5  #第一次检查的时间,容器启动需要时间 
        periodSeconds: 5 #5s检查一次
        timeoutSeconds: 5 #检查的超时时间
        successThreshold: 1 #成功一次就是健康
        failureThreshold: 1 #失败一次就是不健康

liveness探针的httpGet使用

apiVersion: v1
kind: Pod
metadata:
  name: httpget
spec:
  containers:
    - name: nginx
      image: 10.0.0.11:5000/nginx:1.13
      ports:
        - containerPort: 80
      livenessProbe:
        httpGet:
          path: /index.html
          port: 80
        initialDelaySeconds: 3
        periodSeconds: 3

liveness探针的tcpSocket使用

apiVersion: v1
kind: Pod
metadata:
  name: tcpSocket
spec:
  containers:
    - name: nginx
      image: 10.0.0.11:5000/nginx:1.13
      ports:
        - containerPort: 80
      args:
        - /bin/sh
        - -c
        - tail -f /etc/hosts
      livenessProbe:
        tcpSocket:
          port: 80
        initialDelaySeconds: 10
        periodSeconds: 3

readiness探针的httpGet使用

apiVersion: v1
kind: ReplicationController
metadata:
  name: readiness
spec:
  replicas: 2
  selector:
    app: readiness
  template:
    metadata:
      labels:
        app: readiness
    spec:
      containers:
      - name: readiness
        image: 10.0.0.11:5000/nginx:1.13
        ports:
        - containerPort: 80
        readinessProbe:
          httpGet:
            path: /qiangge.html
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 3

startupProbe的使用

startupProbe: #忽略其他探针
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30
  periodSeconds: 10 #300s后无法启动,kubelet杀死容器,根据重启策略,300s内检测成功一次后由livenessProbe接管

通过apiservicer反向代理访问service

curl https://10.0.0.11:8080/api/v1/namespaces/kube-system/services/monitor-prometheus:monitor/proxy/-/reload -k --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key

访问kubelet

curl -k https://127.0.0.1:10250/metrics --cacert /etc/kubernetes/pki/ca.crt --cert /etc/kubernetes/pki/apiserver-kubelet-client.crt --key /etc/kubernetes/pki/apiserver-kubelet-client.key

暴露api接口

kubectl proxy --address=0.0.0.0 --accept-hosts=^*$

port-forward

kubectl port-forward $(kubectl get pods --selector “app.kubernetes.io/name=traefik” --output=name) 9000:9000

弹性伸缩heapster

命令行创建弹性伸缩规则
kubectl autoscale deploy nginx-deployment --max=8 --min=1 --cpu-percent=10
#最大8个pod最小1个,cpu达到百分之十后进行扩容(hpa资源类型)

持久化

查询配置文件字段
kubectl explain pod.spec
-required必须的字段
<boolean>布尔值字段
<Objece>有下一级缩进
<[]Object>列表形式,有多个值
<string>字符串

storageclass

parameters: #保存应创建此存储类的卷的配置程序的参数
  archiveOnDelete: "false"
provisioner: fuseim.pri/ifs
reclaimPolicy: Delete
volumeBindingMode: Immediate #pvc创建后就绑定,WaitForFirstConsumer直到pod被创建后才绑定
allowVolumeExpansion: true #支持卷扩展

官方文档

persistent volume

由管理员创建

spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 100G #容量
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: nfs-pvc-kubernetes-grafana
    namespace: kube-system
  nfs:
    accessModes: #访问模式
      - ReadWriteMany 
    path: /data/kubernetes-grafana-pvc
    server: 192.168.130.207
  persistentVolumeReclaimPolicy: Retain #回收机制
  storageClassName: nfs-storageclass-provisioner
  volumeMode: Filesystem #存储卷模式
status:
  phase: Bound

访问模式可选值如下:

  • ReadWriteOnce:该卷能够以读写模式被加载到一个节点上。
  • ReadOnlyMany:该卷能够以只读模式加载到多个节点上。
  • ReadWriteMany:该卷能够以读写模式被多个节点同时加载。

回收策略可选值如下:

  • Retain-持久化卷被释放后,需要手工进行回收操作。
  • Recycle-基础擦除(“rm-rf /thevolume/*”)
  • Delete-相关的存储资产,例如AWSEBS或GCE PD卷一并删除。

目前,只有NFS和HostPath支持Recycle策略,AWSEBS、GCE PD支持Delete策略。

一个 PV 的生命周期中,可能会处于4中不同的阶段:

Available(可用):表示可用状态,还未被任何 PVC 绑定

Bound(已绑定):表示 PVC 已经被 PVC 绑定

Released(已释放):PVC 被删除,但是资源还未被集群重新声明

Failed(失败): 表示该 PV 的自动回收失败

glusterfs

安装

安装下载源
yum install centos-release-gluster6.noarch -y
安装gluster
yum install glusterfs-server -y

一台机器上一个存储单元,一个存储单元就是一块硬盘

增加gluster节点
gluster peer probe k8s-node2
查看gluster节点
gluster pool list

#创建分布式复制卷
gluster volume create qiangge replica 2 k8s-master:/gfs/test1 k8s-node-1:/gfs/test1 k8s-master:/gfs/test2  k8s-node-1:/gfs/test2 force
#qiangge卷名字 replica副本数 force建议用硬盘名字
#启动卷
gluster volume start qiangge
#查看卷
gluster volume info qiangge 
#挂载卷
mount -t glusterfs 10.0.0.11:qiangge /mnt

热扩容

gluster volume add-brick qiangge k8s-node-2:/gfs/test1 k8s-node-2:/gfs/test2 force

不重启识别硬盘
echo ‘- - -’ >/sys/class/scsi_host/host0/scan
echo ‘- - -’ >/sys/class/scsi_host/host1/scan
echo ‘- - -’ >/sys/class/scsi_host/host2/scan
blkid
查看硬盘的uuid,fstab写uuid

k8s对接分布式存储

gluster是外部资源,因此需要创建endpoints资源

apiVersion: v1
kind: Endpoints #ep
metadata:
  name: glusterfs #和service一致
  namespace: tomcat
subsets:
- addresses:
  - ip: 10.0.0.11
  - ip: 10.0.0.12
  - ip: 10.0.0.13
  ports:
  - port: 49152
    protocol: TCP
apiVersion: v1
kind: Service
metadata:
  name: glusterfs
  namespace: tomcat
spec:
  ports:
  - port: 49152
    protocol: TCP
    targetPort: 49152
  type: ClusterIP
      volumes:
      - name: gluster
        glusterfs:
          path: xiaobing #卷名字
          endpoints: "glusterfs"

创建gluster pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gluster
  labels:
    type: glusterfs
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: "glusterfs"
    path: "qiangge"
    readOnly: false #只读

jenkins+gitee

vim dockerfile
FROM 10.0.0.11:5000/nginx:1.13
ADD . /usr/share/nginx/html

源码管理添加git地址和认证方式

添加文本变量

执行shell
docker build -t 10.0.0.11:5000/yiliao:$version .
docker push 10.0.0.11:5000/yiliao:$version

kubectl -s 10.0.0.11:8080 set image -n yiliao deploy yiliao yiliao=10.0.0.11:5000/yiliao:$version
-s 指定api地址

回滚(另一个任务)
kubectl -s 10.0.0.11:8080 rollout undo -n yiliao deployment yiliao

驱逐pod

kubectl drain $node --ignore-daemonsets --delete-local-data --force
#驱逐除ds以外所有pod,即使存在使用emptyDir存储的pod,即使存在不是由rc、rs、job、ds、statefulset控制的pod也要继续
kubectl cordon $node
#pod不会调度到该节点
kubectl uncordon $node
#维护完成,恢复状态

master同时打上node标签
kubectl label node master node-role.kubernetes.io/node=node
取消标签
kubectl label node master node-role.kubernetes.io/node-

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes 的相关文章

随机推荐

  • DVWA全级别详细通关教程

    目录 暴力破解 Brute Force low Medium High Impossible 命令注入 Command Injection low Medium High Impossible CSRF 跨站请求伪造 low Medium
  • 哈工大团队开源医学智能问诊大模型

    原文 CVHub 门头沟学院AI视觉实验室御用公众号 学术 科研 就业 185篇原创内容 公众号 Title HuaTuo Tuning LLaMA Model with Chinese Medical KnowledgePDF https
  • 【MySQL】MySQL索引详解

    Mysql索引 0 写在前面 1 为什么要使用索引 2 常见的索引模型 3 索引维护 4 回表 举例子 0 写在前面 文章中包含了 1 什么是索引 2 索引的数据结构 以及各自的使用场景 3 为什么要设置主键自增 4 基于主键索引和普通索引
  • 如何修改tomcat默认端口号8080的方法

    1 背景 在默认情况下 tomcat的端口是8080 使用了两个tomcat 那么就需要修改其中的一个的端口号才能使得两个同时工作 2 方法 2 1改动一 那么 如何修改tomcat的端口号呢 首先到安装目录 或者解压目录 下找到conf文
  • 理解c++中左值与右值的一篇文章

    C 中的左值与右值 说明 这一部分内容只是帮助理解 C 11 中左值与右值的概念 在编程实践中 因为编译器优化的存在 特别是其中的返回值优化 Return Value Optimization RVO 使你不需要额外关注左值与右值的区别 像
  • Idea新建项目名后出现中括号别名

    Idea新建项目名后出现中括号别名 1 修改pom xml文件的 artifactId标签 和项目名一致 2 项目名出现中括号是因为iml文件名和项目文件名不一样 需要更改iml文件名即可
  • 开关稳压DC—DC降压电路简介

    在做数字压力开关项目时 电源输入要求是12V 24V 10 系统内需要5V和3 3V的电源 这时提供了三个方案从中选择 方案一 使用24V 5V和5V 3 3V的LDO线性稳压芯片 方案二 使用24V 12V 12V 5V 5V 3 3V种
  • SIP Using SDP with Offer/Answer Model

    根据RFC3261 13 2 1所述 SIP使用的Offer Answer模型是建立在对话环境下的 RFC中还特意对Offer Answer交互有限制 1 初始Offer必须在INVITE消息或者第一个可靠的非失败型响应中 注 当时RFC3
  • arima 公式_小白快速上手数据分析1

    ARIMA时间序列分析 作用 ARIMA时间序列分析通常用于对单列具有时间序列的数据进行预测 例如销售量预测 股票收盘价预测等等 输入 单列数据序列的数据 例如每个月销售额 每天股票的价格 通常数据量为15 50 条 输出 对未来5 15
  • python3 asyncio 爬虫_爬虫高性能asyncio+ahttpio

    async实现协程 异步编程 我们都知道 现在的服务器开发对于IO调度的优先级控制权已经不再依靠系统 都希望采用协程的方式实现高效的并发任务 如js lua等在异步协程方面都做的很强大 python在3 4版本也加入了协程的概念 并在3 5
  • centos8 免登陆 免密码 多用户命令行 启动 ,以及 界面免密

    文章目录 修改 启动 service 临时切换 运行模式 永久 切换 运行模式 由于界面 不同 os 实现 不一样 所以 方法 估计 也都 不太通用 博主 还是 建议 大家 学习 linux 使用 命令行 进行学习 centos8 界面免密
  • 没什么用的代码-批量提取主目录下所有文件夹中pdf里面的图片

    一 提前安装 pip install pymupdf 二 实现的功能 读取一个文件夹及所有子文件夹中的pdf中的图片 判断图片存储条件 存储图片 三 代码 批量提取pdf文件中的图片 author Administrator import
  • Linux基础知识:认识一下内存

    1 什么是内存泄漏 对内存来说 如果之分配内存给程序 而程序使用完不进行释放 就会造成内存泄漏 甚至耗尽系统内存 需要调用free 或unmap 来释放这些内存 2 内存紧张 系统的处理机制 2 1 回收缓存 比如使用 LRU Least
  • 链表和数组的归并排序和快速排序

    链表的归并排序和快速排序 归并排序 Definition for ListNode public class ListNode int val ListNode next ListNode int x val x next null pub
  • 【Arthas】Arthas 导出堆栈信息

    1 概述 转载 Arthas 导出堆栈信息 2 开篇 arthas提供heapdump命令导出栈信息 类似jmap命令的heap dump功能 3 原理介绍 通过通过HotSpotDiagnosticMXBean的dumpHeap来导出栈参
  • Java面试题及答案整理汇总(2023最新版)

    前言 面试前还是很有必要针对性的刷一些题 很多朋友的实战能力很强 但是理论比较薄弱 面试前不做准备是很吃亏的 这里整理了很多面试常考的一些面试题 希望能帮助到你面试前的复习并且找到一个好的工作 也节省你在网上搜索资料的时间来学习 第1 10
  • 最长字符串匹配算法(KMP算法)

    include stdafx h include
  • k-means聚类算法总结

    聚类概念 聚类分析是在对象数据中发现对象之间关系 一般来说 组内相似性越高 组间相似性越大 则聚类的效果越好 k means概念 k means是一种无监督学习 它会将相似的对象归到同一类中 k means聚类的优缺点 优点 容易实现 缺点
  • vue hover事件

    Vue 框架中的 hover 事件可以通过在 HTML 标签上使用 v on mouseover 或者简写为 mouseover 来监听 例如
  • kubernetes

    Deploy资源 spec progressDeadlineSeconds 600 等待多少秒才能确定Deployment进程是卡住的 replicas 1 revisionHistoryLimit 10 指定保留多少旧的 ReplicaS