Loading

记录

控制器

Deployment   # 常用控制器,管理无状态应用
StatefulSet  # 管理有状态应用的控制器,保证每个Pod都有唯一的标识
DaemonSet    # 守护进程控制器,确保在集群中的每个节点上运行一个Pod副本,适用于日志收集、监控代理等

RBAC

# 针对单个命名空间
role         # 在某个命名空间内定义权限
rolebinding  # 将角色绑定到用户、组或服务账户,使其可以在该命名空间内执行相应的操作
# 针对整个集群 
clusterrole  # 在整个集群范围内定义权限
clusterrolebinding # 将集群角色绑定到用户、组或服务账户,使其可以在集群中执行相应的操作

存储配置信息和敏感数据

ConfigMap  # 存储非敏感的配置文件信息或环境变量,不会加密
Secret     # 存储敏感数据密码、令牌等,会加密
# 都支持通过环境变量或挂载卷注入到容器中

存储

本地存储  # hostPath,将宿主机的文件系统挂载到pod中
动态pv   # 基于storageclasses自动创建PV、PVC
静态pv   # pv、pvc手动编写,支持多种存储类型,如hostPath、nfs等

调度策略

# 资源调度
nodeName     # 根据节点主机名调度,强制调度到指定节点
nodeSelector # 根据节点标签调度Pod
affinity     # 亲和性调度设置
    nodeAffinity     # 节点亲和性调度,控制Pod是否应该调度到特定的节点上
    podAffinity      # pod亲和性调度,控制Pod是否应该调度到具有相同标签的Pod所在的节点
    podAntiAfffinity # pod反亲和性调度,控制Pod是否应该避免调度到某些具有特定标签的Pod所在的节点
tolerations  # 污点容忍度调度,允许Pod被调度到有污点(taints)的节点上

命令

command # 容器的启动命令,会替代容器镜像的默认启动命令
args    # 跟在command命令后执行,传递给command的参数,执行顺序是command -> args

探针

livenessProbe  # 存活探针,用于检测容器是否需要重启,容器崩溃或卡住的情况,需要重新启动
    httpGet    # 通过发起 HTTP 请求检查容器的健康状况
    exec       # 通过在容器内执行命令来判断健康
    tcpSocket  # 通过检查容器是否监听指定的端口来判断容器的健康
readinessProbe # 就绪探针,用于检测容器是否已准备好接受流量,如果失败,则会将容器从负载均衡中移除
    httpGet    # 通过 HTTP 请求检查容器是否准备好
    tcpSocket  # 通过检查容器是否在某个端口上侦听来判断容器是否准备好
    exec       # 通过执行容器内部命令判断容器是否准备好

资源限制

resources:  # 1核为1000m,Ti Gi Mi
  requests:  # 容器启动时所需的资源最低值
    cpu: 1
    memory: 1Gi
  limits:    # 容器所能使用的最大资源值
    cpu: 2
    memory: 2Gi

HPA

kubectl autoscale deployment -n prometheus prometheus --cpu-percent=70 --min=1 --max=10 --dry-run=client -o yaml

更新策略

# 更新策略[所有控制器都是默认滚动更新,有些需要特殊设置使用重建更新]
# 如果应用支持平滑过渡,可以选择 滚动更新。
# 如果应用必须从零开始(例如数据库迁移),可以选择 重建更新。
滚动:
strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1  # 表示更新时可以有多少 Pod 不可用
      maxSurge: 1        # 表示在更新过程中,可以额外启动多少 Pod 来进行替代

重建:
strategy:
    type: Recreate

Service(服务)

# 服务用于在 Pod 之间提供稳定的网络访问,通过标签选择器将请求路由到正确的 Pod
- ClusterIP:默认类型,服务只能在集群内部访问。
- NodePort:将服务暴露在每个节点的特定端口上,集群外部可以访问。
- LoadBalancer:使用云平台提供的负载均衡服务来暴露服务。
- ExternalName:将服务映射到外部的 DNS 名称。

Ingress(入口控制器)

# 用于将 HTTP 和 HTTPS 请求路由到集群内的服务。Ingress 需要配合 Ingress Controller 使用,可以提供外部访问和一些高级功能(如 SSL/TLS 终止、反向代理等)
# 例如,定义路由规则:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

NetworkPolicy(网络策略)

# 用于控制 Pod 之间的通信。通过指定入站和出站流量规则,可以精确地控制哪些 Pod 可以与其他 Pod 通信
# 例如,限制只有来自特定标签的 Pod 才能访问服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-network-policy
spec:
  podSelector:
    matchLabels:
      role: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend
posted @ 2024-12-10 16:29  青瓦深巷  阅读(24)  评论(0)    收藏  举报