新钛云服已为您服务1087

Kubernetes是一个开源的、用于管理云平台中多个主机上的容器化应用的系统。其目标是让部署容器化的应用简单并且高效(powerful),它提供了应用部署,规划,更新,维护的一种机制。

Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务)。

管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。

现在Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的将来会支持各种生产云平台中的各种服务,例如,分批,工作流,以及传统数据库。

对于有些人而言,Kubernetes是一个非常复杂调度系统。

…因为它很复杂,所以配置非常冗长。

…由于配置YAML太多,我们需要配合其他多种工具软件来处理该配置。

但是,在本文中,我认为那些认为kubernetns复杂的人,是因为没有找到合理的方式去学习以及使用kubernetns,就像早期的操作系统一样。

Kubernetes对于如何管理配置有一个简单而巧妙的方式,本文也将讨论这种方式。

因为这种方式简单,一致,所以我们可以管理比以往更多的配置!现在,我们不仅可以管理更多的配置,也可以构建复杂的系统。

当然,配置本身可能很复杂。因此,在这篇文章中,我将跳过配置。我将仅专注于kubernetes API机制以及如何探索该API

以这种方式构建API可以使许多工具受益。

是啥方法?

为了解释这种简单而高效的方式,让我们从Unix系统的最核心思想开始:

Everything is a file.

更确切地说,一切皆文本。Unix程序读取和写入文本。文件系统是用于查找要读取的文本的API。并非所有这些文本都是文件!

  • ~/hello-world.txt 是一个文本文件

  • /dev/null 是一个空文本流

  • /proc 是用于阅读有关进程的一组文本流

通过下面的漫画图,让我们仔细看看/proc

您可以通过以下的方式来查看以及了解系统上正在运行什么/proc,例如:

  • 正在运行多少个进程(ls /proc——列出进程)

  • 哪些命令行启动了流程PID(cat /proc/PID/cmdline——获取进程)

  • 进程PID正在使用多少内存(cat /proc/PID/status——获取进程状态)


什么是Kubernetes API?

Kubernetes API是集群系统中的重要组成部分,Kubernetes中各种资源(对象)的数据通过该API接口被提交到后端的持久化存储(etcd)中,Kubernetes集群中的各部件之间通过该API接口实现解耦合,同时Kubernetes集群中一个重要且便捷的管理工具kubectl也是通过访问该API接口实现其强大的管理功能的。

Kubernetes API 是基于资源的(RESTful)、通过 HTTP 提供的编程接口。API 支持通过标准的 HTTP 动词(POST、PUT、PATCH、DELETE 和 GET) 检视、创建、更新和删除主要资源,为很多允许细粒度权限控制的对象提供子资源 (如将 Pod 绑定到节点上),并且出于便利性或效率考虑,支持并提供这些资源的 不同表示形式。

Kubernetes API 还通过 "watch" 和一致性的列表支持高效的资源变更通知, 从而允许其他组件对资源的状态进行高效的缓存和同步。

Kubernetes API适用/proc于分布式系统。

一切都是基于HTTP的资源。我们可以使用一些HTTP GET命令探索每个Kubernetes资源。

如果要继续进行下去,您需要熟悉以下的几种工具:

  • kind ——一个使用 Docker 容器 “nodes” 运行 Kubernetes 集群的工具

  • curl ——用于发送HTTP请求的CLI工具

  • jq ——用于解析JSON的CLI工具

  • kubectl——命令管理Kubernetes 集群,帮助curl认证

下面,让我们从快速创建集群开始:

$ kind create cluster
Creating cluster "kind" ...✓ Ensuring node image (kindest/node:v1.19.1) ????✓ Preparing nodes ????  ✓ Writing configuration ???? ✓ Starting control-plane ????️ ✓ Installing CNI ???? ✓ Installing StorageClass ????
Set kubectl context to "kind-kind"
You can now use your cluster with:kubectl cluster-info --context kind-kindHave a nice day! ????$ kubectl proxy &
Starting to serve on 127.0.0.1:8001

本质上kubectl proxy为访问kubernetes apiserver的REST api充当反向代理角色,这里反向代理的作用与通常意义上的反向代理作用相同,比如提供统一入口进行访问控制、监控、管理,在代理中管理后端,在代理中进行认证等。

当然可以不经过kubectl proxy反向代理直接访问kubernetes apiserver的REST api,但是需要手动管理kubernetes apiserver的地址、手动获取token、手动将token加请到请求的头部,相对来说要繁琐而已。

Kubernetes API比/proc具有更多的层次结构。按版本,名称空间和资源类型将其分为多个文件夹。API路径格式如下:

/api/[version]/namespaces/[namespace]/[resource]/[name]

在一个新的kind集群上,可以看到的命名空间kube-system中已经有一些Pod正在运行 。让我们列出集群中的所有系统进程:

$ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods | head -n 20
{"kind": "PodList","apiVersion": "v1","metadata": {"selfLink": "/api/v1/namespaces/kube-system/pods","resourceVersion": "1233"},"items": [{"metadata": {"name": "coredns-f9fd979d6-5zxtx","generateName": "coredns-f9fd979d6-","namespace": "kube-system","selfLink": "/api/v1/namespaces/kube-system/pods/coredns-f9fd979d6-5zxtx","uid": "a30e70cc-2b53-4511-a5de-57c80e5b68ad","resourceVersion": "549","creationTimestamp": "2021-03-04T15:51:21Z","labels": {"k8s-app": "kube-dns","pod-template-hash": "f9fd979d6"

上述命令会返回大量的内容!我们可以使用jq来提取对象的名称。

$ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods | jq '.items[].metadata.name'
"coredns-f9fd979d6-5zxtx"
"coredns-f9fd979d6-bn6jz"
"etcd-kind-control-plane"
"kindnet-fcjkd"
"kube-apiserver-kind-control-plane"
"kube-controller-manager-kind-control-plane"
"kube-proxy-sn64n"
"kube-scheduler-kind-control-plane"

/pods罗列出了所有的进程,就像ls /proc一样。如果我们要查看一个特定的进程,可以查询/pods/POD_NAME

$ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane | head -n 10
{"kind": "Pod","apiVersion": "v1","metadata": {"name": "kube-apiserver-kind-control-plane","namespace": "kube-system","selfLink": "/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane","uid": "a8f893b7-1cdb-48fd-9505-87d71c81adcb","resourceVersion": "458","creationTimestamp": "2021-03-04T15:51:17Z",

然后,我们可以再次使用jq来获取特定字段。

$ curl -s http://localhost:8001/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane | jq '.status.phase'
"Running"

kubectl又是怎么做的?

上面的所有操作本质上都是可以使用kubectl来完成。kubectl提供了更友好的界面。但是,如果您想知道kubectl正在调用什么API ,可以使用以下命令加上-v 6来运行它:

$ kubectl get -v 6 -n kube-system pods kube-apiserver-kind-control-plane
I0304 12:47:59.687088 3573879 loader.go:375] Config loaded from file:  /home/nick/.kube/config
I0304 12:47:59.697325 3573879 round_trippers.go:443] GET https://127.0.0.1:44291/api/v1/namespaces/kube-system/pods/kube-apiserver-kind-control-plane 200 OK in 5 milliseconds
NAME                                READY   STATUS    RESTARTS   AGE
kube-apiserver-kind-control-plane   1/1     Running   0          116m

有关更高级别的调试,请使用-v 8来查看完整的响应结果。

最后:

本文的关键不是要抛弃kubectl而是使用curl来与Kubernetes进行交互。就像您不应该抛弃ps而仅使用ls / proc一样。

但是我发现像这样剖析Kubernetes有助于对系统的深入了解有很大的帮助:

  • 一切都是基于HTTP的资源。

  • 每个对象的读取和写入方式都相同。

  • 所有对象状态都是可读的。

就像我们可以将Unix工具一起管道化(例如jq)一样,我们可以定义新的Kubernetes对象并将其与现有对象组合。

这些方式可能看起来会有点简单,有点傻,但是却往往是最有效的方式。

原文:https://blog.tilt.dev/2021/03/18/kubernetes-is-so-simple.html

祝祥

· 资深云计算架构师

· OpenStack官方特邀讲师

· 上万台云主机和几十PB分布式存储的建设管理经验

了解新钛云服

捷报!新钛云服斩获WRE「最佳云服务解决方案创新奖」

企业数字化转型探索闭门交流会成功举办!

新钛云服亮相第七届中国数字化创新博览会

新钛云服荣膺第四届FMCG零售消费品行业CIO年会「年度数字化服务最值得信赖品牌奖」

新钛云服三周岁,公司月营收超600万元,定下百年新钛的发展目标

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

往期技术干货

Kubernetes扩容到7,500节点的历程

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

点????分享

戳????在看

使用Curl对Kubernetes进行调试!相关推荐

  1. Kubernetes 上调试 distroless 容器

    作者 | Addo Zhang 来源 | 云原生指北 Distroless 镜像 Distroless 容器,顾名思义使用 Distroless 镜像[1]作为基础镜像运行的容器. "Dis ...

  2. 基于Kubernetes1.20.1版本开发调试环境搭建

    接下来的一段时间将要学习Kubernetes源码,为了更好的查看源码和调试程序,因此搭建了一个Kubernetes开发调试环境,该环境可以结合断点调试理解代码的运行过程. 准备虚拟机并安装必要软件 $ ...

  3. 如何使用cURL一次测量请求和响应时间?

    本文翻译自:How do I measure request and response times at once using cURL? I have a web service that rece ...

  4. 接口快速复制到 Postman 接口快速修改参数调试

    文章目录 接口快速复制到 Postman && 接口快速修改参数调试 前言 背景 此文章可以解决什么问题 如何使用 接口快速复制到 Postman 采用 Console 快速调试 使用 ...

  5. 在 Kubernetes 上部署 Secret 加密系统 Vault

    作者 | 小碗汤 来源 | 进击云原生 HashiCorp Vault 是一个基于身份的 Secret 和加密管理系统.Secret 是您想要严格控制访问的内容,例如 API 加密密钥.密码或证书.V ...

  6. Kubernetes安全专家认证 (CKS)1.20模拟题英文版答案

    文章目录 Question 0 | Instructions Question 1 | Contexts Question 2 | Runtime Security with Falco Questi ...

  7. Kubernetes安全专家认证 (CKS)1.20模拟题答案中文版

    文章目录 问题 1 | 上下文 问题 2 | Falco 的运行时安全性 问题 3 | apiserver 安全 问题 4 | Pod 安全策略 问题 5 | CIS Benchmark 问题 6 | ...

  8. 码农都该知道的开发工具

    阿里篇 一.Java 线上诊断工具 Arthas Arthas 是阿里巴巴 2018 年 9 月开源的一款 Java 线上诊断工具. 使用场景: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...

  9. BAT 程序员们常用的开发工具

    阿里篇 一.Java 线上诊断工具 Arthas Arthas 是阿里巴巴 2018 年 9 月开源的一款 Java 线上诊断工具. 使用场景: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...

最新文章

  1. 关于数论【康托展开及其逆运算】
  2. 错误请联系管理员文件 index.php,ThinkPHP5框架在写项目过程中遇到的相关问题,以及前端问题-Go语言中文社区...
  3. 【ABAP】获取后台Job相关状态
  4. ustc小道消息20211223
  5. 转载,关于缓存穿透、缓存并发、缓存雪崩那些事
  6. C和指针之部分理解和编码总结
  7. 多Kinect下WaitNoneUpdateAll老是报错,烦躁……
  8. C++将double类型小数以16进制格式打印出
  9. Java 并发 —— volatile 关键字
  10. 电磁流量计 ADMAG AXG系列
  11. 计算机科学与技术导论结课报告,计算机科学与技术导论课程报告.doc
  12. JDBC 连接mysql数据库出现 client does not support authen…… update mysql client
  13. 史上最大DDoS攻击”之争”
  14. diy 单片机 自动浇花_基于51单片机的自动浇花装置(很详细)
  15. ShopTalk第19集
  16. 信息系统项目管理师核心考点(八)软件集成技术
  17. ESP8266 烧写选项 Flash Size 32M和32M-c1的区别
  18. 利用Html与css从零开始制作基础静态网页(web课设)
  19. 输入一无符号整数,求所有数位上数字之和
  20. C++多线程技术--API

热门文章

  1. 求(2Y-4)²-4(Y-2)(3Y+7)≥0得解
  2. 如何快速将一张彩色图片变成黑白图片
  3. Unity实现瞄准镜效果之美
  4. C# 窗体修改应用程序图标
  5. 中水处理设备可提高水资源利用率说明
  6. 利用redis代替session保存用户 减少tomcat压力
  7. 使用 springboot 轻松实现网站微信扫码支付以及支付回调逻辑处理(javaJDK实现)
  8. RECON-NG V5使用方法
  9. linux 鼠标滚轮 太快,Linux - 微软无线鼠标滚动过快问题
  10. js中的JSON对象转换,过滤特殊字符数据