温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Kubernetes基础-2

发布时间:2020-06-08 11:21:22 来源:网络 阅读:138 作者:tom_tuwei 栏目:系统运维

1.深入理解Pod对象

 1.Pod容器分类
      • Infrastructure Container: 基础容器
         • 维护整个Pod网络空间
      • InitContainers: 初始化容器
             • 先于业务容器开始执行
      • Containers: 业务容器
          • 并行启动

     2.镜像拉取策略
         • IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
     • Always:每次创建 Pod 都会重新拉取一次镜像
     • Never: Pod 永远不会主动拉取这个镜像

    3.资源限制
       Pod和Container的资源请求和限制:
 • spec.containers[].resources.limits.cpu
 • spec.containers[].resources.limits.memory
 • spec.containers[].resources.requests.cpu
 • spec.containers[].resources.requests.memory
     request可以理解为预分配,即判断集群现有资源,limit和docker资源限制类似。

 4.重启策略(restartPolicy)
    • Always:当容器终止退出后,总是重启容器,默认策略。
  • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
  • Never:当容器终止退出,从不重启容器。

 5.健康检查(Probe)

    Probe有以下两种类型:
      livenessProbe
   如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
     readinessProbe
    如果检查失败, Kubernetes会把Pod从service endpoints中剔除。
 Probe支持以下三种检查方法:

httpGet
发送HTTP请求, 返回200-400范围状态码为成功。
exec
执行Shell命令返回状态码是0为成功。
tcpSocket
发起TCP Socket建立成功。
参考网站:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

6.调度约束
• nodeName用于将Pod调度到指定的Node名称上
• nodeSelector用于将Pod调度到匹配Label的Node上

7.故障排查
Kubernetes基础-2

2.部署应用常用控制器

 1.Pod与controllers的关系

    • controllers:在集群上管理和运行容器的对象
    • 通过label-selector相关联
    • Pod通过控制器实现应用的运维,如伸缩,滚动升级等

    2.Deployment
       • 部署无状态应用
   • 管理Pod和ReplicaSet
         • 具有上线部署、副本设定、滚动升级、回滚等功能
       • 提供声明式更新,例如只更新一个新的Image
         应用场景: Web服务,微服务

    3.DaemonSet
      • 在每一个Node上运行一个Pod
      • 新加入的Node也同样会自动运行一个Pod
            应用场景: Agent
             https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

    4.Job
       Job分为普通任务(Job)和定时任务(CronJob)
   • 一次性执行
    应用场景:离线数据处理,视频解码等业务
            https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

    5.CronJob
       定时任务,像Linux的Crontab一样。
     • 定时任务
             应用场景:通知,备份
        https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/

    6.Statefulset
       部署有状态应用,需要考虑网络ID 和存储问题
          如mysql jenkins等

3.Service – 统一入口访问应用

1.service简介
• 防止Pod失联(服务发现)
• 定义一组Pod的访问策略(负载均衡
• 支持ClusterIP, NodePort以及LoadBalancer三种类型
• Service的底层实现主要有iptables和ipvs二种网络模式

2.Pod与Service的关系
   • 通过label-selector相关联
 • 通过Service实现Pod的负载均衡(TCP/UDP 4层)

3.Service类型
   ClusterIP: 分配一个内部集群IP地址,只能在集群内部访问(同Namespace内的Pod),默认ServiceType。
      ClusterIP 模式的 Service 为你提供的,就是一个 Pod 的稳定的 IP 地址,即 VIP。
 NodePort: 分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务,可以在集群外部访问。
       访问地址: <NodeIP>:<NodePort>
 LoadBalancer: 分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务。
     除此之外, Kubernetes会请求底层云平台上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。一般云服务提供商支持,自建集群不支持该类型。

4.Service代理模式
        Iptables VS IPVS
   Iptables:

• 灵活,功能强大
• 规则遍历匹配和更新,呈线性时延
• 可扩展性
IPVS:
• 工作在内核态,有更好的性能
• 调度算法丰富: rr, wrr, lc, wlc, ip hash...
默认是iptables模式,如果需要使用ipvs,需要修改configmap(kubeadm方式部署,如果是二进制,修改kube-proxy配置文件),服务器开启ipvs。

 5.DNS
     DNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。
    ClusterIP A记录格式: <service-name>.<namespace-name>.svc.cluster.local
   示例: my-svc.my-namespace.svc.cluster.local

小结:

  1. 采用NodePort对外暴露应用,前面加一个LB实现统一访问入口
    1. 优先使用IPVS代理模式
    2. 集群内应用采用DNS名称访问
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI