Kubernetes 基础科普知识点- 容器
Cotainerd本质基础点:各种隔离命名空间namespace隔离 + Linux Control Cgroup —— 简称cgroups(v1/v2 有两代)资源限制;
Kubernetes最小单位的Pod本质 基础容器Infra Container负责申请容器组的UTS/Network/IPC/Time等命名空间 + 业务容器setns加入共享基础容器namespace(默认情况下PID和Mount进程及文件命名空间还是独立隔离的)
Deployment多个Pod实例集合;Pod实例本身是动态无状态,需要统一访问入口负载均衡方便管理,即产生Service;Service是基于四层 TCP 和 UDP 协议转发,还得有应用层协议 (HTTP/HTTPS)访问支持,并通过域名 / 路径做到更细粒度的划分,于是出现了Ingress
- 容器的设计模式
Sidecar:其实就是在Pod里面定义一些专门的容器,通过职责分离与容器的隔离特性,降低业务容器的复杂度。
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目标组中,他们可以在是私有子网,也可以在内部子网,二者均可
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.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
存储卷:
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。