如何使用无状态部署 Deployment
创建集群
创建集群时,做好规划,选择优化的集群配置,可以大大减少后期的运维工作。某些集群配置在建立后就不再可用。修改或者修改法律是极其麻烦的。
集群规划
网络规划:
网络类型:Flannel、Terway
Terway是一款自主研发的网络插件,阿里云容器服务,功能全面兼容Flannel。如果保守的话就用Flannel
Pod网络CIDR
默认大网段16,有效网段或者its 子网为 10.0.0.0/8 、 172.16-31.0.0/12-16 、 192.168.0.0/16
服务CIDR
默认网段20,可选:10.0.0.0 /16-24, 172.16 -31.0.0/16-24, 192.168.0.0/16-24
网段之间不能冲突,创建后不能修改;
多个区域的多个开关。
公网访问ApiServer
对于线上等安全要求较高的集群,可以选择不暴露apiserver,只有私网SLB,但这样就无法使用云效发布;
p>
每日预发布等集群可以将公网SLB暴露给apiserver。集群建立后,立即对SLB建立访问控制,限制SLB只能访问云;
注意:K8s每次都是安全的,漏洞几乎都与ApiServer有关。对于线上K8s集群,必须及时升级补丁,否则公网apiserver不得开放后,必须采用严格的安全组和访问控制。
安全组
设置安全组,限制master机和worker机的访问范围。
主机规划
为了高可用,一般采用3个节点。 Master选择规则如下:
sectionPoints | master规格 | tr>
---|---|
1-5个 | 4C8G |
6-20个节点 | < td>4C16G|
21-100个节点 | 8C32G |
100-200个节点 | 16C64G |
母机存储建议使用高性能50-100G SSD,因为会运行ETCD,操作系统不会占用任何空间8G以上。
Worker机器规划
32C64G ECS
存储。系统盘:100G SSD,数据盘:400G高效云盘
操作系统:centos 7.4 64位
阿里云优先推荐神龙机器伊内斯。对于没有神龙机器的地区,使用高端ECS,配置规格根据部署的POD规格乘以一定倍数。比如Java应用pod一般选择4C8G,ECS最好购买32C64G或者64C128G。设置部署时,为Pod设置固定的请求/限制;
我们选择的机器配置:
集群建立和配置
建立Pod时的设置集群:
通过控制台创建集群,阿里云容器服务提供了非常简单的一键集群部署功能,通过向导完成K8S集群的建立;
按照上述规划设置master和worker节点,并挂载/var/lib/docker到数据盘;
设置合理的Pod网络CIDR、Service CIDR ip网段;
设置合理的安全策略,是否暴露apiserver(需要直接发布到云端,需要暴露在公网,需要严格的访问控制);
ingress选择安全,可以使用内网。如果需要公网,可以在控制台轻松建立,同时完成访问控制;
kube-proxy模式,因为 iptables 模式在 iptables 被锁定时会导致性能问题更新规则。推荐使用IPVS模式;
默认节点POD数量为128,太大。在一个节点上部署这么多是不可能的。建议改为64;
节点服务端口访问(NodePort、SLB),可适当扩展,默认即可。
集群配置修改:
集群扩容,添加现有节点(节点配置参考上文,使用/var/lib/docker挂载数据盘)
Master机升级:
Worker节点配置或移除:
kubectl dance --ignore-daemonsets {node.name}
kubectl删除节点{node.name}
ECS升级和配置
将现有节点添加到集群
< p>命名空间:按应用分组建立命名空间,并为资源占用严重的应用组设置命名空间的资源配额和限制;
授权:
< p>子账户如何向其他子账户授予RBAC授权p>
应用人员通过堡垒机设置权限
部署设置
无状态部署
使用无状态部署Deploy来实现批量发布。
优化设置模板:
apiVersion:apps/v1beta2kind:Deploymentmetadata:annotations:deployment.kubernetes.io/revision:'34'#标签,映射服务标签:app:{app_name}-aone名称:{app_name}-aone-1 命名空间:{app_name}规格:progressDeadlineSeconds:600 个副本:1 个 revisionHistoryLimit:10选择器: 匹配标签: 应用程序:{app_name} -aONE#批量重启更新策略: ROLLINGUPDATE: MAXSURGE: 25%Maxunavailable: 25%Type: Rollingupdate Templat E: Metadata: Labels: App: {app_name} -aone Spec: Containers: # 添加时区到环境变量 - env: - name: TZ value: Asia/Shanghai - image: >-registry-vpc.cn-north-2-gov-1.aliyuncs.com/{namespace}/{app_name}:20230820230005 imagePullPolicy: Always # 优雅离线执行启动前删除 服务注册生命周期: preStop: exec: Command: -do-'-u' - admin - /home/{user_name}/{app_name}/bin/appctl.sh - {app_name} - stop # 生存检查,强烈建议设置 LivenessProbe: failureThreshold: 10 initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 5900 timeoutSeconds: 1 name: {app_name}-aone # 就绪检查,强烈建议设置 readinessProbe: failureThreshold: 10 initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 5900 timeoutSeconds: 1 # 资源 li需要注意的是,必须正确设置 resources: limits: cpu: '4' memory: 8Gi requests: cpu: '4' memory: 8Gi TerminationMessagePath: /dev/termination-log TerminationMessagePolicy: File # 日志存储目录映射到 / var/lib/docker/logs 节点数据盘。应用程序日志目录设置为/home/{user_name}/logs。 VolumeMounts: - mountPath: /home/{user_name}/logs name:volume-1553755418538 dnsPolicy: ClusterFirst ## 私有镜像仓库的密钥,从机密字段获取 imagePullSecrets: - name: {app_name}-987 restartPolicy: Always SchedulerName : default-scheduler securityContext: {} TerminationGracePeriodSeconds: 30 # 日志存储目录,映射到节点的 /var/lib/docker/logs 数据盘 Volumes: – hostPath: path: /var/lib/docker/logs/{app_name} type : '' name:volume-1553755418538
服务设置
因为容器服务的云控制器管理器会同步删除SLB与服务关联,为了防止服务配置修改误删除slb故障,导致需要修改域名、安全等配置的坑。强烈建议将服务与slb解耦。该服务使用 NodePort 方法。 slb另外建立一个指向集群节点的后端服务器。如果需要透传真实IP,并考虑负载均衡,需要遵循一定的配置规则和方法。请参考这篇文章。
NodePort:
apiVersion: v1kind: Servicemetadata: name: {app_name} namespace: {namespaces}spec: clusterIP: 10.1.50.65##策略与是否透传有关真实IP externalTrafficPolicy: 集群端口: - 名称:{app_name}-80-7001 节点端口:32653 端口:80 协议:TCP targetPort:7001 - 名称:{app_name}-5908-5908 节点端口:30835 端口:5108 协议:TCP targetPort :5108秒elector: app: {app_name} sessionAffinity: None type: NodePortstatus: loadBalan cer: {}
然后在负载均衡管理页面选择后端服务器指向集群的worker机器,将端口设置为上述服务的端口:32653,完成配置,在集群服务中修改或者删除重建的。此时slb不会被集群的CCM删除,也不会涉及到域名、安全等配置修改。同时,当需要升级、修改业务配置时,可以设置一些策略来批量削减流量。
这里介绍《如何使用无状态部署Deployment》。感谢您的阅读。如果您想了解更多行业资讯,可以关注网站,小编将为大家输出更多优质实用文章!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何使用无状态部署 Deployment