如何使用无状态部署 Deployment

分类:编程技术 时间:2024-02-20 16:16 浏览:0 评论:0
0
本文介绍“如何使用无状态部署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选择规则如下:

< td>4C16G
sectionPointsmaster规格
1-5个4C8G
6-20个节点
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》。感谢您的阅读。如果您想了解更多行业资讯,可以关注网站,小编将为大家输出更多优质实用文章!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何使用无状态部署 Deployment

用户评论