k8s集群管理

2023-03-13  本文已影响0人  宏势

一、安全

通过安全上下文(Security Context)定义 Pod 或 Container 的特权与访问控制设置, Pod级别将应用到Pod中的所有容器,除非容器自身的安全上下文覆盖这些设置

1. 非root身份运行容器

...
spec:
  securityContext:
    runAsUser: 1000      #设置Pod中的所有容器运行用户
    runAsGroup: 3000     #设置Pod中的所有容器运行用户组
  containers:
  - name: sec-ctx-demo-2
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      runAsUser: 2000    #容器设置覆盖Pod级别,实际运行用户2000,用户组3000
      allowPrivilegeEscalation: false #禁用权限提升

Docker镜像允许在Dockerfile中指定一个用户来运行容器, 如果指定了runAsUser 将覆盖容器镜像中的用户,如果均未指定任务用户,容器将以root身份运行,推荐在安全上下文指定运行用户,更加灵活。安全上下文设置runAsNonRoot: true Kubernetes可以禁止以root身份运行容器。

2.设置container权能

...
spec:
  containers:
  - name: sec-ctx-4
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      capabilities:
        drop: ["all"]
        add: ["NET_ADMIN", "SYS_TIME"]

具体权能参考https://man7.org/linux/man-pages/man7/capabilities.7.html

二、升级策略

.spec.strategy 策略指定用于用新 Pod 替换旧 Pod 的策略

回滚更新参数

...
spec:
   type: RollingUpdate
   rollingUpdate:
       maxSurge: 30%          #默认值25%   不能为0,百分比向上取整
       maxUnavailable: 30%    #默认值25%,不能为0,百分比向下取整

如果replicas=1,且回滚策略未设置默认为25%,那么maxSurge 百分比向上取整为1,maxUnavailable百分比向下取整为0,即创建一个新Pod再停止一个旧Pod

DaemonSet更新策略

最多只能有 DaemonSet 的一个 Pod 运行于每个节点上。

spec.
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1   # 默认策略

三、探针

容器探针主要是有三种:存活探针就绪探针启动探针

1.存活探针

kubelet使用存活探针来确定什么时候要重启容器,有助于提高应用的可用性,存活探针可以探测到应用死锁(程序在运行,但是无法服务)

livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3
livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 15
      periodSeconds: 20
livenessProbe:
      grpc:
        port: 2379
      initialDelaySeconds: 10
ports:
- name: liveness-port
  containerPort: 8080
  hostPort: 8080

livenessProbe:
  httpGet:
    path: /healthz
    port: liveness-port

2.就绪探针

有时候应用启动后暂时无法提供服务,比如启动时需加载大量数据或配置,或者启动后依赖等待外部服务。通过就绪探针,这些未就绪的服务就不会接受Service的流量,保证服务的可用性

3.启动探针

有时候应用启动时间较长,设置启动探针可以保护慢启动容器。可以通过将 failureThreshold * periodSeconds 参数设置为足够长的时间来应对糟糕情况下的启动时间

startupProbe:
  httpGet:
    path: /healthz
    port: liveness-port
  failureThreshold: 30
  periodSeconds: 10

1.存活探针和就绪探针会禁用直到启动探针成功为止
2.存活探针和就绪探针配置相似,唯一区别livenessProbereadinessProbe 关键字

四、备份&恢复

主要两种方式:ETCD快照备份恢复Velero工具

ETCD快照备份恢复

主要备份底层ETCD数据,利用ETCD的备份恢复机制,适用于比较严重的集群灾难

备份

cd /etc/etcd/pki #证书目录
etcdctl   --cacert=ca.pem --cert=server.pem --key=server-key.pem     snapshot save  /var/lib/etcd_backup/backup_$(date "+%Y%m%d%H%M%S").db 

恢复

恢复以后Pod 无法使用,需重启Pod

Velero工具

上一篇 下一篇

猜你喜欢

热点阅读