iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么使用无状态部署Deployment
  • 528
分享到

怎么使用无状态部署Deployment

2024-04-02 19:04:59 528人浏览 安东尼
摘要

本篇内容介绍了“怎么使用无状态部署Deployment”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建集

本篇内容介绍了“怎么使用无状态部署Deployment”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创建集群

创建集群时,做好规划,选择优化好的集群配置,可以大大减少后期运维工作,其中部分集群的配置在建立后再也没法修改或者修改极其麻烦。

集群规划

  • 网络规划:

    • 网络类型: Flannel、Terway

            Terway 是阿里云容器服务自研的网络插件,功能上完全兼容 Flannel,如果保守,还是使用 Flannel  

  • Pod 网络 CIDR

默认 16 的大网段,有效的网段或者其子网 10.0.0.0/8,172.16-31.0.0/12-16,192.168.0.0/16

  • Service CIDR

    • 默认 20 的网段,可选:10.0.0.0/16-24,172.16-31.0.0/16-24,192.168.0.0/16-24

    • 网段不能冲突重复,建立后没法修改;

    • 多个区域的多个交换机。

  • 公网访问 apiServer

    • 对于线上等安全要求高的集群,可以选择不暴露 apiserver, 只有私网 SLB, 但是这样没法使用云效发布;

    • 日常预发等集群,可以暴露公网 SLB 到 apiserver, 集群建立后立即为 slb 建立访问控制,限制 slb 只能云效访问;

注: k8s 每次安全漏洞几乎都与 ApiServer 有关,对于线上 K8s 集群,要及时升级补丁,或者不开放公网 apiserver,使用严格的安全组和访问控制。

  • 安全组

    • 设置安全组限定访问范围,为 master 与 worker 机器使用。

  • Master 机器规划

   为了高可用,一般使用 3 节点, Master 选择规则如下:

节点数 master 规格
1-5个4C8G
6-20个节点4C16G
21-100个节点8C32G
100-200个节点16C64G

master 机器的存储建议高性能的 50-100G SSD,因为会运行 ETCD,操作系统占用不超过 8G。

  • Worker 机器规划

    • 32C64G ECS

    • 存储。系统盘:100G SSD,  数据盘:400G 高效云盘

    • 操作系统:Centos 7.4 64 位

    • 阿里云首推神龙机器,没有神龙机器的区域,选用高配 ECS,配置规格根据部署的 POD 规格乘以一定倍数,比如 Java 应用 pod 一般选择 4C8G,ECS 则购买 32C64G 或者 64C128G 为好,设置部署的时候为 pod 设置固定的 request/limit;

    • 我们选用的机器配置:

集群建立与配置

建立集群时设置:

  • 通过控制台建立集群,阿里云容器服务提供的非常简易的一键部署集群功能,通过向导完成 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 drain --ignore-daemonsets {node.name}

    • kubectl delete node {node.name}

    • ECS 升配变配

    • 添加已有节点到集群

  • 命名空间: 

    • 按照应用分组建立 namespace,对于资源占用厉害需要限制的应用分组,设置该 NameSpace 的资源配额与限制;

  • 授权:

    • 子账号如何给其他子账号进行 RBAC 授权

    • 通过堡垒机按应用人员设置权限

 

部署设置

 

无状态部署

使用无状态部署 Deployment,实现分批发布。
优化设置模板: 

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: '34'# 标签,映射 service
  labels:
    app: {app_name}-aone
  name: {app_name}-aone-1
  namespace: {app_name}
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: {app_name}-aone# 批量重启更新策略      
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%    type: RollingUpdate
  template:
    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}:20190820190005
          imagePullPolicy: Always          # 启动前执行优雅下线摘除 服务注册
          lifecycle:
            preStop:              exec:                command:
                  - sudo
                  - '-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          # 资源限制,这个一定要合理设置  
          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

 

服务设置

因为容器服务的 Cloud Controller Manager 会同步删除 service 建立关联的 SLB,为了防止 service 配置修改误删除 slb 故障,并导致域名、安全等配置需要修改的坑,强烈建议 service 与 slb 解耦,service 采用 NodePort 的方式,slb 另外建立后端服务器指向集群节点,如果需要透传真实 IP,并考虑负载均衡,需要遵守一定的配置规则和方法,参考 这个文章。

NodePort:

apiVersion: v1
kind: Servicemetadata:
  name: {app_name}
  namespace: {namespaces}spec:
  clusterIP: 10.1.50.65## 策略关系到是否透传真实 IP
  externalTrafficPolicy: Cluster
  ports:
    - name:  {app_name}-80-7001
      nodePort: 32653
      port: 80
      protocol: TCP
      targetPort: 7001
    - name:  {app_name}-5908-5908
      nodePort: 30835
      port: 5108
      protocol: TCP
      targetPort: 5108
  selector:
    app:  {app_name}
  sessionAffinity: None
  type: NodePortstatus:
  loadBalancer: {}

然后在负载均衡管理页面,选择后端服务器指向集群的 worker 机器,设置端口为以上服务的端口:32653,完成配置,这样在集群 service 修改或者删除重建的时候,slb 不会被集群的 CCM 删除,不会涉及到域名,安全等配置修改。同时,可以设置一些策略,需要升级修改服务配置时,分批切流等。

“怎么使用无状态部署Deployment”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么使用无状态部署Deployment

本文链接: https://www.lsjlt.com/news/70846.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用无状态部署Deployment
    本篇内容介绍了“怎么使用无状态部署Deployment”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建集...
    99+
    2024-04-02
  • python中怎么使用__iter__()展现外部状态
    这篇文章主要介绍python中怎么使用__iter__()展现外部状态,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长...
    99+
    2023-06-14
  • react无状态怎么写
    这篇文章主要介绍了react无状态怎么写,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 react无状态写法是“...
    99+
    2024-04-02
  • 如何通过StatefulSet部署有状态服务应用
    这篇“如何通过StatefulSet部署有状态服务应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何通过Stateful...
    99+
    2023-06-29
  • 使用Docker部署静态网站
    要使用Docker部署静态网站,您可以按照以下步骤进行操作: 创建一个Dockerfile文件,用于定义Docker镜像的构建规则...
    99+
    2024-04-25
    Docker
  • k8s入门之deployment怎么使用
    这篇“k8s入门之deployment怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“k8s入门之deployment...
    99+
    2023-07-05
  • 通过StatefulSet部署有状态服务应用实现方式
    目录先总结后详解:StatefulSet的基本概念:示例:定义一个StatefulSet资源StatefulSet的扩容与缩容StatefulSet扩容:StatefulSet缩容:...
    99+
    2024-04-02
  • ubuntu怎么隐藏顶部状态栏
    在Ubuntu中,可以通过以下步骤隐藏顶部状态栏:1. 打开终端:你可以通过按下Ctrl + Alt + T组合键来打开终端。2. 运行以下命令以编辑Gnome Shell的设置:```gsettings set org.gnome.s...
    99+
    2023-08-11
    ubuntu
  • prometheus怎么部署和使用
    Prometheus 是一个开源的监控系统,用于监控和报警。以下是如何部署和使用 Prometheus 的简要步骤: 下载 Pr...
    99+
    2024-03-12
    Prometheus
  • 怎么使用expect部署redis
    要使用expect部署Redis,你需要编写一个expect脚本来自动化这个过程。下面是一个简单的expect脚本示例:```#!/...
    99+
    2023-08-31
    expect redis
  • 怎么使用docker部署hbase
    这篇文章将为大家详细讲解有关怎么使用docker部署hbase,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。安装docker先输入docker -v,装过就不用再装了。yum update&nb...
    99+
    2023-06-14
  • 怎么使用apache部署react
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。Apache部署react项目(从安装到部署完成)1.安装1.1下载Apache传送门:Apache Haus Downloads解压后,我放入E盘 1....
    99+
    2023-05-14
    apache React
  • Elementui怎么部署及使用
    要部署和使用ElementUI,需要按照以下步骤进行操作:1. 安装ElementUI:使用npm或者yarn命令安装Element...
    99+
    2023-10-20
    Elementui
  • Tomcat部署web项目出现http状态404未找到怎么解决
    这篇文章主要介绍了Tomcat部署web项目出现http状态404未找到怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Tomcat部署web项目出现http状态404未找到怎么解决文章都会有所收获,下面...
    99+
    2023-07-05
  • CentOS中怎么部署静态网站
    要在CentOS中部署静态网站,可以按照以下步骤进行操作: 确保你的CentOS系统已经安装了Apache Web服务器。如果没有...
    99+
    2024-04-19
    CentOS
  • Flutter有状态组件怎么使用
    今天小编给大家分享一下Flutter有状态组件怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。有状态组件flutter...
    99+
    2023-06-26
  • React18状态批处理怎么使用
    本篇内容介绍了“React18状态批处理怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!状态自动批处理18版本之前, 在合成事件之外的...
    99+
    2023-06-30
  • 怎么使用Docker-compose部署mysql
    这篇文章主要介绍了怎么使用Docker-compose部署mysql的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Docker-compose部署mysql文章都会有所收获,下面我们一起来看看吧。一、D...
    99+
    2023-07-06
  • 怎么使用Gitee Pages部署静态网站及交互功能
    这篇文章主要介绍“怎么使用Gitee Pages部署静态网站及交互功能”,在日常操作中,相信很多人在怎么使用Gitee Pages部署静态网站及交互功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用G...
    99+
    2023-07-05
  • Vue3状态管理之Pinia怎么使用
    这篇文章主要介绍“Vue3状态管理之Pinia怎么使用”,在日常操作中,相信很多人在Vue3状态管理之Pinia怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3状态管理之Pinia怎么使用”的疑...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作