阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

Kubernetes 1.3 的蚌中之珠

  • 2020-03-10
  • 本文字数:3060 字

    阅读完需:约 10 分钟

Kubernetes 1.3 的蚌中之珠

伴随着 5000 多次的提交,以及大约 350 位贡献者在社区以及该行业的贡献,Kubernetes 现在已经到 1.3 版本了,已于上周发布!


Kubernetes 的首次发布要追溯到两年前。这个项目的社区参与度和创新度都达到了惊人的地步,有个人参与合作,也有行业领导者(谷歌,红帽等等)来推进,并且给所有人带来生产级容器集群管理。这篇博客就是来探究 Kubernetes1.3 中的一些隐藏功能的。

Kubernetes1.3 中的新功能

Kubernetes1.3 已经把重点放到了跨集群、跨区域和跨云边界上的部署和扩容服务,运行稍大范围的工作(包括有状态服务,比如说数据库),增加规模和自动化,并且支持 rkt,OCI&CNI 容器标准。

PetSet

到现在为止,部署有状态应用(比如分布式数据库)已经是一个棘手的问题,但是其实也不是做不到。Jetstack 在伦敦的 KubeCon 上演讲描述了这些挑战,同样也描述了解决方案的普通模式。


社区引进的 alpha 版本中的“PetSet”对象来描述这样的系统。kubernetes 现在有一个功能,可以用来部署 Pods,这些 Pods 的功能是保障网络和存储身份。它甚至还可以动态规定云端的按需存储(目前只能用在 AWS EBS 和 GCE PD 上)。

集群联盟(“Ubernetes”)

Kubernetes1.3 令运行在多个集群上的服务发现成为可能,可能会让跨区域,或者跨云提供商来供容器或者外部客户使用。这个“Ubernetes”联盟可以被用来增加 HA,地理分配和混合云/多云端,是令人兴奋的第一阶段,并会在 1.4 及之后的版本中继续开发和完善。

Rktnetes 1.0

Kubernetes 创建之初就没有与特定容器运行环境绑定。Kubernetes1.3 版本是第一个整合 rkt 运行环境的稳定版本,可以用来替换 Docker(目前为止的默认运行环境)。是的,这就是 rktnetes。


rkt 是 Core OS 一个快速成熟的项目,现在已经是 1.10.0 版本了。它实现了应用程序容器规范,还拥有很多可以完美取代 Docker 的功能。比如,兼容初始化系统(如 systemd,nspawn),确保有更大的隔离(使用 LKVM stage1)。


在最近的博客中从 CoreOS 团队那里了解更多关于rktnetes的信息。

可扩展性

Kubernetes 现在支持 2000 个节点的集群,同时还减少了端对端 Pod 启动时间。在这样的情况下,最后造成了可扩展性的改进的挑战就是使用基于Protocol Buffer系列化的 API,而不是 JSON,最后对可扩展性的做了改进。


最近的博客帖子描述了一些改进的细节,以及项目使用的 Kubemark 性能测试工具。


在几周或几个月后,Jetstack 将会在博客中更加细致地讲述这些新的用户面对的功能,重点是,他们还会解释如何开启,如何将他们用到实践中去。比如,我会展示如何处理使用 Kubernetes 多区/多云。我们也会展示如何在本地更加轻松地部署分布式数据库——在我们与客户目前正在积极处理的区域内。

Kubernetes1.3 隐藏的新功能

这篇帖子中除了主要的部分,我们还想要引出一些我们十分喜欢的,但是知道的人还很少的功能,但是这些功能也同样有用,同样十分重要。要注意的是,一些功能和增强功能都还是 alpha 版本。

Kubectl Deployment

Deployment 是一个提供声明式,服务端更新 Pod 和 ReplicaSets 的 API。虽然它还是个测试版功能,但是它现在已经被广泛接受和使用了,并处于活跃开发期,包括计划和进行中的新功能(具体请参阅路线部署图)。在 Kubernetes1.3 中,新的命令已经被添加到 kubectl 使管理和监控部署更新更加便利。

更新 Deployment 的容器镜像

以前,如果你想要在 ReplicaSet 中为 Pods 更新容器镜像,通过 Deployment 管理,你可以使用 kubectl 并且直接编辑 Deployment 的 YAML。


新的命令 kubectl 设置现在允许容器镜像在单行命令行上设置。


监控 deployment rollout

为了监控更新的 rollout,并且验证它是否成功,这里有个新的很方便的命令:rolloutstatus。比如,nginx/nginx:1.7.9 中查看 nginx/nginx:1.9.1 的 rollout。


垃圾回收(测试版)

Kubernetes 资源常常互相依赖。比如,ReplicaSets 根据指定的模板创建 Pods。如果你想要删除这个 ReplicaSet,你就必须要找出跟选择器匹配的 Pod,串联删除匹配的 Pods。


以后在 1.4 版本或者更高版本中,这样的串联清理会由 KCM(kube controller manager)来处理。在准备阶段,1.3 为 API 对象引入了额外的元数据域 ownerReferences。对于 ReplicaSet/Pods 的例子,Pods 包含了到它们所有者的 ReplicaSet 的引用。一旦 ReplicaSet 被删除,garbage collector 也会删除这个 Pod。还有一个叫做 orphanDependents 的配置选项,可以禁用串联删除的功能。


垃圾回收在 1.3 中还是一个 alpha 功能,所以默认状态下,它是禁用的。要打开这个功能,你需要打开 kube-apiserver 和 KCM,还有 flag——启用 garbage collector。


在用户指南那里了解更多关于 garbage collector 的功能,要注意的是,使用的时候要自己承担风险(毕竟是测试版)。

Shell 补全整合到 kubectl

作为资深 kubectl 用户,你可能已经知道这个补全脚本,保存在/contrib/completions 核心项目的文件夹中。这不仅提供了 kubectl 的子命令和参数,还提供了像 Namespace 和 Pods 资源的名字。


像往常一样,对于 Go 语言二进制文件来说,kubectl 的分布通常只包括单个文件。这就令保留兼容性的完整文件更加困难了。出于这个原因,这个脚本从 1.3 版本起就被整合到 kubectl。现在加载补全性跟添加一行代码一样简单:


Init containers(测试版)

测试版本功能 init containers 允许在长期运行的主要 Pod 容器发布之前运行某一命令。这些命令按顺序执行,只有当这些命令成功运行,主容器才会开始运行。这就允许你能够下载特定的文件到数据卷,生成应用程序的配置文件,在这个过程中不需要再重新打包到容器镜像等等。


下面是 Pod 运行 kubectl 的特定版本的例子。在每次 Pod 发布的时候下载这个版本。为了演示,第二个 init containers 包括了一个执行 kubectl 二进制的命令。Pod 说明书包括了必要的 annotation,如下图所示:




Pod 一旦在状态内运行,你就可以使用下载好的 kubectl 二版本-kubectl exec 到 Pod 容器中来运行 kubectl;):



http://kubernetes.io/docs/user-guide/production-pods/#handling-initialization了解更多 init containers 及其使用方法。

为 pods/containers 使用定制配置(测试版)

  • docker 从 1.10 版本开始支持配置 Seccomp 策略来初步限制容器执行特权。Seccomp 通过拦截系统调用来实施这个沙箱机制。这个过滤器由 BPF 规则来定义。


要把特定配置文件绑定到 Pod 上,你可以使用以下 alpha annotations:


为所有 Pod 的容器定义一个 Seccomp:


seccomp.security.alpha.kubernete.io/pod


为单个容器定义一个 Seccomp 文件:


container.seccomp.security.alpha.kubernetes.io/${container_name}


对注释的值,你可以使用以下内容:



如果你想要使用定制配置(前缀是 localhost/),你必须把这些复制到你集群中的每一个工作节点。文件的默认文件夹是/var/lib/kubelet/seccomp.

例子:如何阻止 chmod 系统调用

在这个例子中,我们创建了两个 Pods。都要尝试在文件上修改权限。当 Pod chmod-unconfined 用 Docker 的默认文件运行成功,在 Pod chmod-prevented 中同样的命令行运行失败,因为这是它的 Seccomp 文件所不允许的。


要清楚的是你必须满足以下要求才可以:


  • Docker 版本必须 1.10 及以上

  • Kubernetes 的版本要 1.3.0-beta.2 版本及以上

  • 要复制 prevent-chmod 到所有的 worker 节点


Seccomp Profile/var/lib/kubelet/seccomp/prevent-chmod



Pod specification seccomp-pods.yaml



create pods



本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/Wq7lCDGzZJMOWLNg5fIdLA


2020-03-10 20:45444

评论

发布
暂无评论
发现更多内容

2022 全球 AI 模型周报

Zilliz

人工智能 深度学习 计算机视觉

开放下载 | 飞天技术峰会-云原生加速应用构建分论坛资料开放下载

阿里巴巴云原生

阿里云 云原生

师文汇:OceanBase 4.0 产品核心能力解读

OceanBase 数据库

2022年网约车平台服务用户体验指数(UEI)

易观分析

用户体验 网约车平台

上游sql通过drainer同步到kafka时在kafka中是什么样子的

TiDB 社区干货传送门

实践案例 管理与运维 版本测评 大数据场景实践 实时数仓场景实践

多种姿势搞定Tidb集群监控大屏

TiDB 社区干货传送门

监控

历时10个月,1300+队伍参赛 第二届HarmonyOS开发者创新大赛奖项揭晓

Geek_2d6073

MySQL的redolog如何保证数据不丢?其中原理你真的知道吗?

Java全栈架构师

Java MySQL 数据库 程序员 程序人生

AppCube视角浅析: 艾瑞咨询《2022年中国低代码行业研究报告》

华为云开发者联盟

后端 开发

看完年薪30W~120W程序员分别需要掌握的技能栈,我彻底悟了!

程序员小毕

Java 程序员 程序人生 后端 架构师

Dijkstra(迪杰斯特拉算法)的实现(C,C++,Matlab)

Five

算法 图论 8月月更

RT-Thread记录(十六、SFUD组件 — SPI Flash的读写)

矜辰所致

RT-Thread 8月月更 SFUD SPI设备

PCTP考试学习笔记之一:深入TIDB体系架构(下)

TiDB 社区干货传送门

TiDB 底层架构 管理与运维 TiDB 源码解读 TiKV 源码解读

TCP异常场景:三次握手四次挥手丢包情况解析

Java全栈架构师

程序员 面试 TCP 计算机网络 秋招

swap去中心化交易所系统开发技术分析

开发微hkkf5566

RT-Thread记录(十七、AT组件 — ESP8266使用 at_device 软件包联网)

矜辰所致

esp8266 RT-Thread 8月月更 AT组件

数字藏品:为何深受年轻人喜爱,到底有何魔力?

开源直播系统源码

数字藏品 数字藏品开发 数字藏品系统

2022 DEMO CHINA 创新中国峰会将于9月7-8日在无锡举办

创业邦

实战-记录一次大版本升级

TiDB 社区干货传送门

新版本/特性解读

PCTP考试学习笔记之一:深入TIDB体系架构(上)

TiDB 社区干货传送门

管理与运维 TiDB 源码解读 TiKV 源码解读 TiKV 底层架构

阿里巴巴全新出品Spring全家桶笔记:(Spring+SpringBoot+SpringCloud)

Java永远的神

Java spring 程序员 面试 程序人生

SENSORO 智慧城市平台中的延时队列设计

SENSORO

大数据 物联网 智慧城市 延时队列

pd-ctl 选项 --jq 格式化语法使用案例详解

TiDB 社区干货传送门

性能调优 实践案例 管理与运维 扩/缩容

深入理解Java虚拟机!京东大佬耗时半年肝出来的HotSpot VM源码剖析笔记真香(附完整源码)

Java全栈架构师

Java 源码 面试 程序人生 JVM

使用函数计算自定义运行时快速部署一个 SpringBoot 项目 | 文末有礼

阿里巴巴云原生

阿里云 Serverless 云原生 springboot 函数计算

Dubbo 3 易用性升级之 Dubbo 官网大改版

阿里巴巴云原生

阿里云 开源 云原生 dubbo

独自一人开发一整套ERP系统是什么水平?

优秀

ERP系统

融云移动办公协同平台,助力政企数智化转型升级

融云 RongCloud

企业 即时通讯

TiFlash 表达式的实现与设计

TiDB 社区干货传送门

SBOM落地的关键一步——漏洞可利用性交流(VEX)

SEAL安全

软件供应链安全 漏洞管理

华为云算法零门槛:零基础教你AI试伊妆

程思扬

华为 API 华为云 开发者说

Kubernetes 1.3 的蚌中之珠_文化 & 方法_才云科技_InfoQ精选文章