Write than Memory

Created
Apr 3, 2025 06:47 AM
Tags
kubernetes
EKS
AWS
 
Kubernetes 基础科普知识点
  • 容器 Cotainerd 本质基础点:各种隔离命名空间 namespace 隔离 + Linux Control Cgroup —— 简称 cgroups (v1/v2 有两代)资源限制;
  • Kubernetes 最小单位的 Pod 本质 基础容器 Infra Container 负责申请容器组的 UTS / Network / IPC / Time等命名空间 + 业务容器 setns 加入共享基础容器 namespace (默认情况下 PIDMount 进程及文件命名空间还是独立隔离的)
  • Deployment 多个 Pod 实例集合; Pod 实例本身是动态无状态,需要统一访问入口负载均衡方便管理,即产生 ServiceService 是基于四层 TCP 和 UDP 协议转发,还得有应用层协议 (HTTP/HTTPS)访问支持,并通过域名 / 路径做到更细粒度的划分,于是出现了 Ingress
notion image
  • 容器的设计模式 Sidecar:其实就是在 Pod 里面定义一些专门的容器,通过职责分离与容器的隔离特性,降低业务容器的复杂度。
notion image
 

AWS 踩坑记

 
VPC 网络规划
  • 公有子网 可通过在路由表中 0.0.0.0/0 关联 IGW 实现与互联网的双向访问,这种子网下的实例即可实现服务器访问公网,也可让公网访问进来;( ELB / ALB / Internet GateWay
  • 私有子网 可通过在路由表中 0.0.0.0/0 关联 NAT 公网 IP 实现子网内的云产品访问公网,但不可被互联网访问;
  • 内部子网 纯云内互通,不可访问公网,也不能被公网访问。路由表中没有 0.0.0.0/0 这一条规则;
  • ELB / ALB 创建时候选择绑定子网,必须选择在公有子网
  • EC2应用服务器位于 Target group目标组中,他们可以在是私有子网,也可以在内部子网,二者均可
notion image
 
EKS 集群相关
管理用户授权:
  • 添加 IAM 访问条目授权;
  • 集群 EKS 角色权限授权;
kubectl create clusterrolebinding yousri-cluster-admin \ --clusterrole=cluster-admin \ --user=arn:aws:iam::awsid:user/qingxianyan@gmail.com
 
ALB:
规则默认条数限制:
  • 每个 ALB 默认配置最多 50 条规则 (包括监听器规则和转发规则)
  • 每个 监听器 默认最多可以有 100 条规则,其中包括默认规则和自定义规则。默认规则不计入配额。
  • AWS LoadBalance Controller V2.6 版本以后的默认自动创建管理的安全组 Security Groups 开始分为前后端组即 frontend 和 backend ,可以使用以下方式实现满足满足自定义安全组:
    • Service 类型 :
      • service.beta.kubernetes.io/aws-load-balancer-security-groups: "sg-id,sg-id2" service.beta.kubernetes.io/aws-load-balancer-manage-backend-security-group-rules: "true"
    • ALB 类型:
      • alb.ingress.kubernetes.io/security-groups: "sg-di,sg-id2" alb.ingress.kubernetes.io/manage-backend-security-group-rules: "true"
      参考示例
      apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin spec: containers: - name: httpbin image: kennethreitz/httpbin ports: - containerPort: 80 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 periodSeconds: 10 --- apiVersion: v1 kind: Service metadata: name: httpbin annotations: service.beta.kubernetes.io/aws-load-balancer-name: k8s-test-sec service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-security-groups: "sg-0e13cc201407db906" service.beta.kubernetes.io/aws-load-balancer-manage-backend-security-group-rules: "true" service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: "HTTP" service.beta.kubernetes.io/aws-load-balancer-healthcheck-path: "/" service.beta.kubernetes.io/aws-load-balancer-healthcheck-port: "80" spec: selector: app: httpbin ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
    • 其他实现方式: 使用 loadBalancerSourceRanges 注释来控制,无法直接通过安全组的策略方式来实现。
    • 参考文档: https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/service/annotations/#access-control https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/service/annotations/#security-groups
 
存储卷StorageClass
  • EBS 类型卷 只支持 ReadWriteOnce 并无法支持 ReadWriteMany ,并且会与 可用区 做绑定,无法支持跨可用区使用;
  • EFS 类型卷 才可支持 ReadWriteMany 模式及支持跨可用区,可以理解为类似 NFS 存储类型;
 
EC2 的 EBS 磁盘扩容
AWS Console 控制台修改相应 ebs 磁盘卷的容量大小后,还需要手动 ec2 上做相应的扩容文件系统:
lsblk sudo growpart /dev/nvme0n1 1 sudo resize2fs /dev/nvme0n1p1
 
Kubernetes 相关
手动创建 namespace 时,如何关联到 kubesphere 平台命名空间下的项目里;
kubectl label namespace <your-namespace> kubesphere.io/workspace=<your-workspace> kubectl annotate namespace <your-namespace> kubesphere.io/creator=kubesphere
手动创建导入 TLS 域名证书
kubectl -n namespace create secret tls secret-name --cert=yousri.me.crt --key=yousri.me.pem
 
批量清理被驱逐的异常 pod
kubectl get pods --all-namespaces --field-selector=status.phase==Failed|grep Evicted | awk '{print $2 " -n " $1}'| xargs -r kubectl delete pod
 
Java 相关
没有特别指定配置 JVM 堆大小情况下,默认最大小值:
  • 初始堆内存大小(Xms:通常是系统内存的 1/64。
  • 最大堆内存大小(Xmx:通常是系统内存的 1/4。