Kube

更新应用时,如何实现 K8s 零中断滚动更新?

人走茶凉 提交于 2020-07-29 02:53:02
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! Kubernetes 集群中,业务通常采用 Deployment + LoadBalancer 类型 Service 的方式对外提供服务,其典型部署架构如图 1 所示。这种架构部署和运维都十分简单方便,但是在应用更新或者升级时可能会存在服务中断,引发线上问题。今天我们来详细分析下这种架构为何在更新应用时会发生服务中断以及如何避免服务中断。 图1 业务部署图 为何会发生服务中断 Deployment 滚动更新时会先创建新 pod,等待新 pod running 后再删除旧 pod。 新建 Pod 图 2 服务中断示意图 中断原因:Pod running 后被加入到 Endpoint 后端,容器服务监控到 Endpoint 变更后将 Node 加入到 SLB 后端。此时请求从 SLB 转发到 Pod 中,但是 Pod 业务代码还未初始化完毕,无法处理请求,导致服务中断,如图 2 所示。 解决方法:为 pod 配置就绪检测,等待业务代码初始化完毕后后再将 node 加入到 SLB 后端。 删除 Pod 在删除旧 pod 过程中需要对多个对象(如 Endpoint、ipvs/iptables、SLB)进行状态同步,并且这些同步操作是异步执行的,整体同步流程如图 3 所示。 图 3

理解 K8s 资源更新机制,从一个 OpenKruise 用户疑问开始

拥有回忆 提交于 2020-07-29 02:30:25
作者 | 酒祝 阿里云技术专家 背景 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment / StatefulSet 等控制器,但 OpenKruise 提供了更多的增强功能如:优雅原地升级、发布优先级/打散策略、多可用区workload抽象管理、统一 sidecar 容器注入管理等,都是经历了阿里巴巴超大规模应用场景打磨出的核心能力。这些 feature 帮助我们应对更加多样化的部署环境和需求、为集群维护者和应用开发者带来更加灵活的部署发布组合策略。 目前在阿里巴巴内部云原生环境中,绝大部分应用都统一使用 OpenKruise 的能力做 Pod 部署、发布管理,而不少业界公司和阿里云上客户由于 K8s 原生 Deployment 等负载不能完全满足需求,也转而采用 OpenKruise 作为应用部署载体。 今天的分享文章就从一个阿里云上客户对接 OpenKruise 的疑问开始。这里还原一下这位同学的用法(以下 YAML 数据仅为 demo): 准备一份 Advanced StatefulSet 的 YAML 文件,并提交创建。如: apiVersion: apps.kruise.io/v1alpha1 kind: StatefulSet metadata: name: sample spec: # .

Kubernetes 1.6 配置可视化界面

亡梦爱人 提交于 2020-07-28 21:02:01
kubenetes github : https://github.com/kubernetes/dashboard/releases kubenetes官网: https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/ 这是官网的截图,但是我去下载发现不成功 其实真正的地址在 https://github.com/kubernetes/dashboard/blob/master/aio/deploy/recommended.yaml 所以kubenetes v1.16.0 应该使用新版dashboard ui才兼容 查看github,用到的镜像有两个dashboard:v2.0.0-beta4、metrics-scraper:v1.0.1 kubernetesui/dashboard:v2.0.0-beta4 kubernetesui/metrics-scraper:v1.0.1 先拉取镜像,本人使用的docker版本19.03.2 docker pull kubernetesui/dashboard:v2.0.0-beta4 docker pull kubernetesui/metrics-scraper:v1.0.1 主节点从节点都需要拉镜像 拉成功后 获取yaml文件 https

kubernetes资源均衡器Descheduler

被刻印的时光 ゝ 提交于 2020-07-28 20:48:55
背景 Kubernetes中的调度是将待处理的pod绑定到节点的过程,由Kubernetes的一个名为kube-scheduler的组件执行。调度程序的决定,无论是否可以或不能调度容器,都由其可配置策略指导,该策略包括一组规则,称为谓词和优先级。调度程序的决定受到其在第一次调度时出现新pod时的Kubernetes集群视图的影响。由于Kubernetes集群非常动态且状态随时间而变化,因此可能需要将已经运行的pod移动到其他节点,原因如下: 一些节点不足或过度使用。 原始调度决策不再适用,因为在节点中添加或删除了污点或标签,不再满足pod / node亲和性要求。 某些节点发生故障,其pod已移至其他节点。 新节点将添加到群集中。 因此,可能会在群集中不太理想的节点上安排多个pod。Descheduler根据其政策,发现可以移动并移除它们的pod。请注意,在当前的实现中,descheduler不会安排更换被驱逐的pod,而是依赖于默认的调度程序。 Descheduler二次调度 GitHub地址: https://github.com/kubernetes-sigs/descheduler 下面是重要的配置 configmap.yaml --- apiVersion: v1 kind: ConfigMap metadata: name: descheduler -policy-

Kubernetes 1.18.3高可用集群快速升级及扩容

一世执手 提交于 2020-07-28 17:52:59
Kubernetes 1.18.3 已经正式发布,高可用集群也可以直接升级(这里改用hub.docker.com的镜像,可以快速更新整个集群、增加新的master和worker节点)。 快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。参考《 Ubuntu上软件锁定版本不更新 》安装特定DockerCE版本。 实现将镜像传送到相应节点上,然后在任何一个master节点运行下面的命令即可完成升级。 kubeadm upgrade apply v1 .18 .3 在当前的集群中新增节点: 第一步,重新创建certificate key和token: sudo kubeadm init phase upload-certs --upload-certs ### Got: # [upload-certs] Using certificate key: # 2ffe5bbf7d2e670d5bcfb03dac194e2f21eb9715f2099c5f8574e4ba7679ff78 # Add certificate-key for Multi Master Node. kubeadm token create --print-join-command --certificate-key

k8s实践(1)--k8s集群入门

非 Y 不嫁゛ 提交于 2020-07-28 17:41:34
我们学习安排:由浅入深 1、简单了解集群的工作原理和基础概念,名词解释。 2、安装etcd集群:etcd分布式键值存储系统,用于保持集群状态,比如Pod、Service等对象信息。 3、安装k8s集群,简单了解集群的如何工作。 4、搭建集群网络:基础网络搞好,后面才能顺利部署各种资源。 5、学习k8s的安全、Secrets,ssl认证。如果安全认证没有搞好,创建pod和service都会报各种错误。 6、然后我们深入学习pod和service。 7、深入学习集群工作原理分析,从基础到深度,才能学的扎实。 8、有了pod和service,就需要知道如果发现,学习coreDNS 9、开始部署一些有状态的服务 10、案例实践 一、Kubernetes简介 1.1 Kubernetes简介 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S。 K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。 K8S主要用于自动化部署、扩展和管理容器应用,提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。 Kubernetes目标是让部署容器化应用简单高效。 Kubernets官方网站:www.kubernetes.io,目前在github.com

CICD实现方法之二--Gitlab+Jenkins+K8S

安稳与你 提交于 2020-07-28 03:13:56
承接上篇文章: 上周发布了新的博客文章,CI实现方法之--Gitlab+Drone,有幸被51cto推荐到首页,在上次的文章中做了CI相说明与测试操作,在生产环境为了提高生产力,增加容错,避免人为误操作等,出现了CICD,对于CICD在此文章中再说明一次 随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。 此次比之前增加了jenkins与k8s,k8s自不必多说,看官们应该都清楚,这里主要说明jenkins。 Jenkins是一款使用java语言开发的开源的自动化服务器。通过界面或者jenkinsfile告诉它执行什么任务,何时执行。理论上,我们可以让它执行任何任务,但是通常只应用于持续集成和持续交付。 一、测试前提条件 实验环境说明 测试主机:阿里云主机 操作系统:CentOS 7.7 测试主机配置:2C,8G 主机名 公网IP 内网IP ROLE PORT node1 39.104.17.55 172.16.0.101 k8s-master 6443 node2 39.104.61.142 172.16.0.100 k8s-node1 node3 39.104.70.121 172.16.0.99 k8s-node2

向Kubernetes集群域名服务器中插入自定义的解析记录-coredns

老子叫甜甜 提交于 2020-07-27 16:32:16
向Kubernetes集群域名服务器中插入自定义的解析记录-coredns 注意:从Kubenretes 1.14开始,集群内部的域名服务器默认换成了coredns 找到kube-system命名空间的名称为coredns的configmap: » kubectl get configmap coredns -n kube-system NAME DATA AGE coredns 1 9d » 编辑这个configmap: ~ » kubectl edit configmap coredns -n kube-system 编辑为以下内容(添加了hosts块): apiVersion: v1 data: Corefile: | .:53 { errors health kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure upstream fallthrough in-addr.arpa ip6.arpa ttl 30 } hosts { 10.10.10.10 www.baidu.com 10.10.10.11 www.baidu.cn #添加记录 } prometheus :9153 forward . "/etc/resolv.conf" cache 30 loop reload loadbalance }

Kubernetes官方java客户端之六:OpenAPI基本操作

孤街醉人 提交于 2020-07-27 12:13:40
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等; 概览 本文是《Kubernetes官方java客户端》系列的第六篇,以下提到的java客户端都是指client-jar.jar; 前文 《Kubernetes官方java客户端之五:proto基本操作 》 已经提到,java客户端的基本功能由两个主要脉络组成,第一个是proto,主要功能是使用ProtoClient类提供的增删改查接口,这些接口用到的入参和返回对象所涉及到的java类,都是通过K8S的protobuf生成的; 除了使用ProtoClient对K8S资源进行增删改查,还提供了另一种更强大的方式:OpenAPI,本章咱们就来一起学习OpenAPI相关的操作; K8S的OpenAPI 先抛开java客户端不提,咱们来看看K8S本身的OpenAPI,地址是:https://kubernetes.io/zh/docs/concepts/overview/kubernetes-api/ ,关键信息如下图所示,可见K8S提供了OpenAPI规范: 如果您想查看当前K8S环境的OpenAPI规范,请打开K8S环境的/etc/kubernetes/manifests/kube

k8s 之dashboard部署

偶尔善良 提交于 2020-07-27 11:41:18
基于上篇文档安装 主节点: 安装kubenet-dashboard发现会报错 kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml ed/kubernetes-dashboard.yaml 可以先下载这个 dashboard.yaml wget http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml 修改一下:讲Deployment的apiversion改成 apps/v1 #不支持以前的版本 [root@k8s-master ~]# cat kubernetes-dashboard.yaml # Copyright 2017 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may