乐趣区

关于cncf:使用Lens管理多云Kubernetes

你填了吗?

10 人将获赠 CNCF 商店 $100 美元礼券!

来参加 2020 年 CNCF 中国云原生考察

问卷链接(https://www.wjx.cn/jq/9714648…)


客座文章作者:Nimal Kunnath,Nutanix 系统可靠性工程师

大量报告一直表明,明天的企业将混合和多云作为其首选的 IT 基础设施部署模式。依据 IDG 的一项考察,超过一半(55%)的组织目前应用多个私有云,21% 的组织说他们应用三个或更多的私有云。

随着开发人员逐步适应构建和公布容器,Kubernetes 显然已成为容器编排的首选。组织为什么要跨多个云供应商部署 Kubernetes 有很多起因:

云暴发

在多云基础设施中,“暴发(bursting)”波及应用一个云的资源来补充另一个云的资源。当应用公有云的组织达到 100% 的资源容量时,溢出的流量会被转移到私有云,防止业务中断。

劫难复原与备份

在实践中,你不心愿一个云提供商成为单点故障。通过在云上扩散复原资源,你能够取得比繁多云基础设施更大的弹性和可用性。

在所有这些基础设施就绪之后,IT 经营团队治理多个集群十分具备挑战性。呈现了以下挑战:

  • 要拜访集群,须要保护大量的 kubectl 和 kubeconfig 文件。对于不同的集群 / 我的项目,必须在它们之间进行上下文切换,而且跨云提供商拜访办法的不同减少了复杂性,这可能会很麻烦。
  • 尽管开发人员通常专一于编写代码,但当初他们学习应用程序的操作方面也并不常见。尽管 Kubernetes 旨在帮忙他们更快地公布和更新应用程序,但它自身就很简单。他们心愿可能放慢概念的学习速度,放慢学习曲线,这样他们就能够专一于最重要的货色:利用程序代码。
  • 在 Kubernetes 中进行故障排除并不是一项简略的工作。在调试过程中,管理员必须从 pod 日志和事件、pod 状态等中辨认谬误。新管理员很容易破费大量贵重的工夫来找出正确的命令和日志,以查看对业务的不利影响。

Kubernetes 裸露了一个规范的仪表板,它提供了在集群上运行的应用程序的概览,但这是在单个集群级别上实现的。心愿有一个对立的治理解决方案来解决上述挑战。明天咱们将聚焦于开源解决方案 Lens。

Lens 是一个独立的应用程序,能够在 MacOS、Windows 和 Linux 上应用,这意味着你不须要在 Kubernetes 节点自身装置任何包。通过导入 kubeconfig 文件,单个 IDE 能够用于治理任何平台上的所有集群。让咱们一起来看看。

装置 Lens

浏览 Lens 网页,在你喜爱的操作系统下载并装置。关上应用程序后,立刻点击“+”按钮增加集群。你能够导入 kubeconfig 文件或粘贴它,瞧!让魔法开始吧。

我曾经部署了两个集群,一个应用 Karbon(Nutanix 的 Kubernetes 治理解决方案)在 Nutanix 公有云上,另一个应用 Azure Kubernetes 服务。为 AKS 集群导入 kubeconfig 文件如下所示。

在集群概览中,你能够通过单个窗格玻璃看到所有可用的集群资源。你能够查看所有工作负载、它们的以后状态、任何相干事件,甚至能够通过命名空间对它们进行过滤。点击任何资源都会拉出它的所有细节 - 基本上,就像你从以下输入中看到的一样:

kubectl get <daemonset|pod|deployment> -n <namespace> <name> -o yaml

部署应用程序

在这里,我增加了 Karbon 集群,以及 Lens。让咱们持续并将 Cassandra StatefulSet 部署到这个集群上。

上面是我应用的 YAML:

apiVersion: v1
kind: Service
metadata:
 labels:
 app: cassandra
 name: cassandra
spec:
 clusterIP: None
 ports:
 - port: 9042
 selector:
 app: cassandra
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
 name: cassandra
 labels:
 app: cassandra
spec:
 serviceName: cassandra
 replicas: 3
 selector:
 matchLabels:
 app: cassandra
 template:
 metadata:
 labels:
 app: cassandra
 spec:
 terminationGracePeriodSeconds: 1800
 containers:
 - name: cassandra
 image: gcr.io/google-samples/cassandra:v13
 imagePullPolicy: Always
 ports:
 - containerPort: 7000
 name: intra-node
 - containerPort: 7001
 name: tls-intra-node
 - containerPort: 7199
 name: jmx
 - containerPort: 9042
 name: cql
 resources:
 limits:
 cpu: "500m"
 memory: 1Gi
 requests:
 cpu: "500m"
 memory: 1Gi
 securityContext:
 capabilities:
 add:
 - IPC_LOCK
 lifecycle:
 preStop:
 exec:
 command:
 - /bin/sh
 - -c
 - nodetool drain
 env:
 - name: MAX_HEAP_SIZE
 value: 512M
 - name: HEAP_NEWSIZE
 value: 100M
 - name: CASSANDRA_SEEDS
 value: "cassandra-0.cassandra.default.svc.cluster.local"
 - name: CASSANDRA_CLUSTER_NAME
 value: "K8Demo"
 - name: CASSANDRA_DC
 value: "DC1-K8Demo"
 - name: CASSANDRA_RACK
 value: "Rack1-K8Demo"
 - name: POD_IP
 valueFrom:
 fieldRef:
 fieldPath: status.podIP
 readinessProbe:
 exec:
 command:
 - /bin/bash
 - -c
 - /ready-probe.sh
 initialDelaySeconds: 15
 timeoutSeconds: 5
 volumeMounts:
 - name: cassandra-data
 mountPath: /cassandra_data
 volumeClaimTemplates:
 - metadata:
 name: cassandra-data
 spec:
 accessModes: ["ReadWriteOnce"]
 storageClassName: default-storageclass
 resources:
 requests:
 storage: 1Gi

在利用之后,你能够看到通过 Lens 创立的 StatefulSet、服务、pod 和其余资源。

你能够查看正在为 Pod 更新的实时日志,这对于故障排除十分贵重。所有的事件也记录在同一页上,这是你看到以下的输入:

kubectl describe pod cassandra-0

这些相对是很好的工具,能够在部署期间为你节俭很多麻烦和工夫。

此外,你还能够在同一个页面上从 pod 进入 shell。咱们验证 Cassandra 集群的所有三个节点都在运行,如上面的截图所示。

如果你还是不称心,Lens 还提供了创立、更新和删除资源的选项,能够间接从 GUI 和内置终端中创立、更新和删除资源,内置终端会主动切换到正确的上下文。

让咱们持续部署一个 ReplicaSet 来启动三个 nginx pod。这将部署在“nginx”命名空间,它也是从 Lens 创立的。

RBAC 受权

反对 Kubernetes RBAC,这意味着通过 Lens 连贯到 Kubernetes 集群的个人用户只能与他们被容许的资源进行交互。

在上面的图片中,你能够看到域用户 nimal@emea.nutanix.com 曾经导入了他的 kubeconfig 文件,然而他没有权限列出任何 pod。

集群管理员部署以下 YAML 文件,为该用户 nimal@emea.nutanix.com 创立角色 sre-role 和 RoleBinding sre-role-binding。

apiVersion: v1
kind: Namespace
metadata:
 name: sre
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
 namespace: sre
 name: sre-role
rules:
- apiGroups: ["","apps","batch","extensions"]
 resources: ["services", "endpoints", "pods", "deployments"]
 verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
 namespace: sre
 name: sre-role-binding
subjects:
- kind: User
 name: nimal@emea.nutanix.com
 apiGroup: rbac.authorization.k8s.io
roleRef:
 kind: Role
 name: sre-role 
 apiGroup: rbac.authorization.k8s.io

接下来,咱们看到用户被受权执行如下所示的雷同操作。

总结

Kubernetes 是一个具备疾速扩大功能集的简单平台。可能在整个生命周期中简化 Kubernetes 治理的工具和技术可能最好地服务于用户。Lens 具备丰盛的性能和仪表板,为 Kubernetes 治理提供了简化多云治理的无效办法。它只须要很少的学习,在多个 Kubernetes 集群之间提供简略的上下文切换、实时集群状态可视化,甚至应用规范 Kubernetes API 强制执行 RBAC 安全性。Lens 能够显著进步生产率,并且是在多云配置中治理 Kubernetes 集群的最佳抉择!

对于作者

Nimal Kunnath 是 Nutanix 的系统可靠性工程师。他领有超过 6 年的数据中心产品教训,目前从事企业云服务,包含虚拟化、数据存储、网络、容器化和分布式系统。

点击浏览网站原文。


CNCF (Cloud Native Computing Foundation) 成立于 2015 年 12 月,隶属于 Linux  Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培养和保护一个厂商中立的开源生态系统,来推广云原生技术。咱们通过将最前沿的模式民主化,让这些翻新为公众所用。扫描二维码关注 CNCF 微信公众号。

退出移动版