标签 Kubernetes 下的文章

OpenCost 是一款与 Kubernetes 无缝集成的云成本监控工具,可让您实时跟踪云支出,从而相应地优化资源。

Kubernetes 是一个强大的平台,用于管理云中的动态容器化应用,但可能很难理解成本发生在哪里。管理 Kubernetes 资源的成本效率可能是一个挑战。这就是 OpenCost 的用武之地。OpenCost 是一种云成本监控工具,与 Kubernetes 无缝集成,让你可以实时跟踪云支出,以便相应地优化资源。

OpenCost 是一个开源 CNCF 沙盒项目规范,用于实时监控与 Kubernetes 部署相关的云成本。该规范按服务、部署、命名空间、标签等对当前和历史 Kubernetes 云支出和资源分配进行建模。这些数据对于理解和优化 Kubernetes 从应用到基础设施的成本和性能至关重要。

要求和安装

开始使用 OpenCost 是一个相对简单的过程。OpenCost 使用 Prometheus 进行监控和指标存储。你可以从 Prometheus 社区的 Kubernetes Helm Chart 安装它。

安装 Prometheus

首先使用以下命令安装 Prometheus:

$ helm install my-prometheus --repo https://prometheus-community.github.io/helm-charts prometheus \
 --namespace prometheus --create-namespace \
 --set pushgateway.enabled=false --set alertmanager.enabled=false -f \
https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/prometheus/extraScrapeConfigs.yaml

安装 OpenCost

接下来,使用 kubectl 命令安装 OpenCost:

$ kubectl apply --namespace opencost -f \
https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/opencost.yaml

此命令将 OpenCost 部署到你的集群并开始收集数据。这就是大多数安装所需的全部内容。你可以使用你自己的 Prometheus 安装或使用 OpenCost Helm Chart 自定义部署。

测试和访问

OpenCost 会自动检测它是否在 AWS、Azure 还是 GCP 上运行,你可以将其配置为为本地 Kubernetes 部署提供定价。首先转发 API 和 UI 访问的端口:

$ kubectl port-forward --namespace opencost service/opencost 9003 9090

大约五分钟内,你可以验证 UI 和服务器是否正在运行,并且你可以通过 http://localhost:9090 访问 OpenCost UI。

监控成本

你已准备好开始使用部署到 Kubernetes 集群的 OpenCost 来监控云成本。OpenCost 仪表板提供对云支出的实时可见性,使你能够识别成本异常并优化云资源。你可以按节点、命名空间、pod、标签等查看云支出。

OpenCost monitoring console

kubectl cost 插件提供了对 Kubernetes 成本分配指标的简单 CLI 查询。它允许开发人员、运营商和其他人快速确定任何 Kubernetes 工作负载的成本和效率。

$ kubectl cost --service-port 9003 \
--service-name opencost --kubecost-namespace opencost \
--allocation-path /allocation/compute pod \
--window 5m --show-efficiency=true

+-------+---------+-------------+----------+---------------+
|CLUSTER|NAMESPACE|POD          |MONTH RATE|COST EFFICIENCY|
+-------+---------+-------------+----------+---------------+
|cl-one |kube-syst|coredns-db...| 1.486732 |      0.033660 |
|       |         |coredns-...dm| 1.486732 |      0.032272 |
|       |         |kube-prox...7| 1.359577 |      0.002200 |
|       |         |kube-prox...x| 1.359577 |      0.002470 |
|       |opencost |opencost...5t| 0.459713 |      0.187180 |
|       |kube-syst|aws-node-cbwl| 0.342340 |      0.134960 |
|       |         |aws-node-gbfh| 0.342340 |      0.133760 |
|       |prometheu|my-prome...pv| 0.000000 |      0.000000 |
|       |         |my-prome...hn| 0.000000 |      0.000000 |
|       |         |my-prome...89| 0.000000 |      0.000000 |
+-------+---------+-------------+----------+---------------+
| SUMMED|         |             | 6.837011 |               |
+-------+---------+-------------+----------+---------------+

你还可以集成 API,以编程方式将数据提取到你选择的平台中。

Kubernetes 优化策略

现在你已经掌握了云成本,是时候优化你的 Kubernetes 环境了。优化是一个迭代过程。从栈的顶部(容器)开始并遍历每一层。每一步的效率都会复合。有很多方法可以优化 Kubernetes 以提高成本效率,例如:

  • 查找废弃的工作负载和未申明的卷:不再使用或断开连接的容器荚和存储会继续消耗资源而不提供价值。
  • 调整你的工作负载大小:确保你为你的工作负载使用正确大小的容器。调查分配过多和分配不足的容器。
  • 自动扩展:自动扩展可以帮助你仅在需要时使用资源来节省成本。
  • 调整集群大小:节点过多或过大可能会导致效率低下。在容量、可用性和性能之间找到适当的平衡可能会大大降低成本。
  • 研究更便宜的节点类型:CPU、RAM、网络和存储有很多变化。切换到 ARM 架构可能会带来更大的节省。
  • 投资 FinOps 团队:组织内的专门团队可以通过协调预留实例、现货实例和节省计划来寻找实现更大节省的方法。

从今天开始

监控 Kubernetes 环境中的成本可能具有挑战性,但使用 OpenCost 则不必如此。要开始使用 OpenCost 并控制你的云支出,请访问 OpenCost 网站,在 GitHub 中获取代码,查看 OpenCost 文档,并参与 CNCF Slack 中的 #opencost 频道。

(题图:MJ/5de557f1-464c-480c-8698-130748f60b20)


via: https://opensource.com/article/23/3/kubernetes-cloud-cost-monitoring

作者:Matt Ray 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Kubernetes 是一个开源容器编排平台,已成为大规模管理容器化应用的首选解决方案。虽然 Kubernetes 提供了强大的命令行工具来管理集群,但有时可视化界面可以使监控和管理部署变得更加容易。Kubernetes 仪表板是一个基于 Web 的用户界面,可让你可视化 Kubernetes 集群并与之交互。

在这篇博文中,我们将逐步引导你完成安装和访问 Kubernetes Dashboard 的过程,使你能够简化 Kubernetes 管理任务。

先决条件:

在安装 Kubernetes Dashboard 之前,请确保你有一个正在运行的 Kubernetes 集群并具有必要的管理访问权限。

安装 Kubernetes 仪表板

为集群安装 Kubernetes 仪表板的简单方法是通过 Helm Chart。Kubernetes 仪表板现在依赖于 cert-manager 和 nginx-ingress-controller。幸运的是,可以使用 Helm Chart 自动安装这些依赖项。但是,如果你已经安装了这些组件,则可以在安装 Chart 时通过设置标志 –set=nginx.enabled=false–set=cert-manager.enabled=false 来禁用它们的安装。

事不宜迟,让我们进入安装步骤。

1)安装 Helm

使用终端或命令提示符访问集群的主节点。如果没有安装,请安装 helm。运行以下命令。

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh

2)添加 Kubernetes 仪表板 Helm 仓库

运行以下 helm 命令来添加仪表板仓库:

$ helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
$ helm repo list

3)安装 Kubernetes 仪表板

要使用 helm 安装 Kubernetes 仪表板,请运行以下命令:

$ helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard

上面的输出确认仪表板已部署在 Kubernetes-dashboard 命名空间中。因此,要访问仪表板,请运行:

$ kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-nginx-controller 8443:443

现在,打开运行上述命令的系统的 Web 浏览器,输入以下 URL:

https://localhost:8443

点击“ 接受风险并继续 Accept the Risk and Continue ”。

正如你在上面看到的,我们需要一个令牌才能登录。因此,让我们在下一步中生成所需的令牌。

4)为 Kubernetes 仪表板生成令牌

再打开一个到主节点的 SSH 会话,创建一个服务帐户并使用以下 yaml 文件分配所需的权限:

$ vi k8s-dashboard-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

保存并退出文件。

接下来通过运行以下命令创建服务帐户:

$ kubectl create -f k8s-dashboard-account.yaml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
$

现在,为管理员用户生成令牌,运行:

$ kubectl -n kube-system  create token admin-user

复制此令牌并返回浏览器,将其粘贴到“ 输入令牌 Enter token ”字段中,如下所示:

点击“ 登录 Login ”。

5) 访问 Kubernetes 仪表板

当我们点击上面的“登录”时,我们将看到以下仪表板:

太好了,你现在已登录 Kubernetes 仪表板。以下是一些需要探索的关键特性和功能:

  • 集群概览:获取集群运行状况、资源利用率和运行 Pod 的概览。
  • 工作负载:查看和管理你的部署、副本集、有状态集和守护程序集。
  • 服务:监控和管理你的服务,包括负载均衡器和外部端点。
  • 配置:探索你的配置映射、密钥和持久卷声明。
  • 存储:管理持久卷和存储类。
  • 命名空间:在命名空间之间切换以查看和管理不同项目或团队的资源。

这就是这篇文章的全部内容,我希望你发现它有用且内容丰富。请在下面的评论部分发表你的疑问和反馈。

(题图:MJ/1bd0efb0-d4ee-4c8b-854a-49dbf38c5dd7)


via: https://www.linuxtechi.com/how-to-install-kubernetes-dashboard/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在本文中,我们将逐步向你展示如何在 Kubernetes(k8s)集群上安装 Ansible AWX。

Ansible AWX 是一个强大的开源工具,用于管理和自动化 IT 基础设施。AWX 为 Ansible 提供图形用户界面,使你可以轻松创建、安排和运行 Ansible 剧本 Playbook

另一方面,Kubernetes 是一种流行的容器编排平台,广泛用于部署和管理容器化应用。

先决条件:

  • Kubernetes 集群
  • Kubectl
  • 具有 sudo 权限和集群管理员权限的普通用户
  • 互联网连接

步骤 1:安装 Helm

如果你的系统上安装了 Helm,则在命令下运行以进行安装,

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod +x get_helm.sh
$ ./get_helm.sh
$ helm version

Install-helm-linux-command-line

步骤 2:安装 AWX chart

在 Kubernetes 上安装 AWX 的最简单方法是使用 AWX Helm “ 海图 chart ”。因此,要通过 “海图” 安装 AWX,首先使用以下 helm 命令添加仓库。(LCTT 译注:Kubernetes 生态中大量使用了和航海有关的比喻,因此本文在翻译时也采用了这些比喻)

$ helm repo add awx-operator https://ansible.github.io/awx-operator/
"awx-operator" has been added to your repositories
$

注意:如果你之前已经添加过此仓库,请在命令下运行以获取最新版本的软件包。

$ helm repo update

要通过 Helm 安装 awx-operator,请运行:

$ helm install ansible-awx-operator awx-operator/awx-operator -n awx --create-namespace

helm-install-awx-operator-kubernetes

这将下载 AWX 海图并将其安装在 awx 命名空间中的 Kubernetes 集群上。安装过程可能需要几分钟,请耐心等待。

步骤 3:验证 AWX 操作员安装

安装成功后,你可以通过运行以下命令来验证 AWX 操作员 operator 状态:

$ sudo kubectl get pods -n awx

你应该看到这样的东西:

awx-operator-pod-status-kubectl

步骤 4: 创建 PV、PVC 并部署 AWX yaml 文件

AWX 需要 postgres 容器荚 pod 的持久卷。那么,让我们首先为本地卷创建一个存储类。

注意:在本文中,我使用本地文件系统作为持久卷。

$ vi local-storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
  namespace: awxprovisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

保存并关闭文件,然后运行:

$ kubectl create -f local-storage-class.yaml
$ kubectl get sc -n awx
NAME            PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   
local-storage   kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                 
$

接下来使用以下 pv.yaml 文件创建持久卷(PV):

$ vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
  namespace: awx
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /mnt/storage
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-worker

保存并退出文件。

Postgres-pv-awx-kubernetes

重要说明:确保文件夹 /mnt/storage 存在于工作节点上,如果不存在,则在工作节点上使用 mkdir 命令创建它。在我们的例子中,工作节点是 k8s-worker

执行下面的命令在 awx 命名空间中创建 postgres-pv

$ kubectl create -f pv.yaml

成功创建 PV 后,使用 pvc.yaml 文件创建 PersistentVolumeClaim:

$ vi  pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-13-ansible-awx-postgres-13-0
  namespace: awx
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

posgres-pvc-awx-kubernetes

要创建 PVC,请运行以下 kubectl 命令:

$ kubectl create -f pvc.yaml

使用下面的命令验证 PV 和 PVC 的状态:

$ kubectl get pv,pvc -n awx

现在,我们都准备好部署 AWX 实例了。创建一个包含以下内容的 ansible-awx.yaml 文件:

$ vi ansible-awx.yaml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: ansible-awx
  namespace: awx
spec:
  service_type: nodeport
  postgres_storage_class: local-storage

Ansible-awx-yaml-file

保存并关闭文件。

执行以下 kubectl 命令来部署 awx 实例:

$ kubectl create -f ansible-awx.yaml

等待几分钟,然后检查 awx 命名空间中的容器荚状态。

$ kubectl get pods -n awx

Ansible-AWX-Pods-Status-Kubernetes

步骤 5:访问 AWX Web 界面

要访问 AWX Web 界面,你需要创建一个公开 awx-web 部署的服务:

$ kubectl expose deployment ansible-awx-web --name ansible-awx-web-svc --type NodePort -n awx

此命令将创建一个 NodePort 服务,该服务将 AWX Web 容器的端口映射到 Kubernetes 节点上的端口。你可以通过运行以下命令找到端口号:

$ kubectl get svc ansible-awx-web-svc  -n awx

这将输出如下内容:

NAME                 TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
ansible-awx-web-svc   NodePort   10.99.83.248   <none>        8052:32254/TCP   82s

在此示例中,Web 服务在端口 32254 上可用。

Expose-Ansible-AWX-Web-NodePort-Kubernetes

默认情况下,admin 用户是 Web 界面的 admin,密码在 <resourcename>-admin-password 机密信息中。要检索管理员密码,请运行:

$ kubectl get secrets -n awx | grep -i admin-password
ansible-awx-admin-password        Opaque               1      109m
$
$ kubectl get secret ansible-awx-admin-password -o jsonpath="{.data.password}" -n awx | base64 --decode ; echo
l9mWcIOXQhSKnzZQyQQ9LZf3awDV0YMJ
$

你现在可以打开 Web 浏览器并进入 http://<node-ip>:<node-port>/ 来访问 AWX Web 界面。在上面的示例中,URL 是:

http://192.168.1.223:3225

AWX-Login-URL-Kubernetes

输入凭据后单击登录。

Ansible-AWX-Web-Dashboard

恭喜! 你已在 Kubernetes 上成功安装 Ansible AWX。你现在可以使用 AWX 来自动化你的 IT 基础架构,并让你作为系统管理员的生活更轻松。

(题图:MJ/bfd354aa-2ee5-4555-98b8-ac5207cbeabe)


via: https://www.linuxtechi.com/install-ansible-awx-on-kubernetes-cluster/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Lens Desktop 是一个令人兴奋的 Kubernetes 工作平台。它是基于 OpenLens 资源库的一个定制化发行版本。通过本文来了解下 Lens Desktop 能做什么以及它是如何工作的。

Lens Desktop 是免费的。你可以查看 https://app.k8slens.dev/subscribe 来了解更多内容。Lens Desktop 有如下优势:

  • 简单高效 —— 你无需学习 kubectl 命令
  • 可视化已有的 Kubernetes 资源
  • 基于开源代码构建
  • 可观测性 —— 实时的统计数据、事件和日志流
  • 错误和警告可以直接在 Lens 仪表盘上看到
  • 支持 EKS、AKS、GKE、Minikube、Rancher、k0s、k3s、OpenShift
  • 强大的社区支持 —— 有 450000 用户,在 GitHub 上共获得 17000 星

Minikube 安装

Minikube 是一个用于本地运行 Kubernetes 的工具。它运行一个单节点的 Kubernetes 集群,这样就可以在 Kubernetes 上进行日常软件开发的实践工作。

我们将使用 Minikube 并验证 Lens 的用法。首先让我们在基于 Windows 的系统上安装 Minikube。你也可以把它安装在其他操作系统、虚拟机或笔记本电脑上。

  • 2 核以上 CPU
  • 2GB RAM
  • 20GB 空闲硬盘空间
  • 能连接网络
  • 容器或虚拟机管理器,如 Docker、VirtualBox

在终端或命令提示符处,运行 minikube start 命令:

minikube start --driver=virtualbox
* minikube v1.12.3 on Microsoft Windows 10 Home Single Language 10.0.19044 Build 19044
* Using the virtualbox driver based on existing profile
* minikube 1.26.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.26.0
* To disable this notice, run: ‘minikube config set WantUpdateNotification false’
* Starting control plane node minikube in cluster minikube
* virtualbox “minikube” VM is missing, will recreate.
* Creating virtualbox VM (CPUs=2, Memory=3000MB, Disk=20000MB) ...
! This VM is having trouble accessing https://k8s.gcr.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* Preparing Kubernetes v1.18.3 on Docker 19.03.12 ...
* Verifying Kubernetes components...
* Enabled addons: default-storageclass, storage-provisioner
* Done! kubectl is now configured to use “minikube”

进入你的 VirtualBox,并验证刚安装的 Minikube 虚拟机功能正常(图 1)。

Figure 1: Minikube virtual machine in virtual box

使用 minikube status 命令,查看状态是否与下面的输出一致:

C:\>minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

然后,使用 kubectl cluster-info 命令查看 KubeDNS 详情:

kubectl cluster-info
Kubernetes master is running at https://192.168.99.103:8443
KubeDNS is running at https://192.168.99.103:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

你可以使用 kubectl cluster-info dump 命令来调试和诊断集群问题。

当 Minikube 安装完成后,安装 kubectlhttps://kubernetes.io/docs/tasks/tools/)。它是一个命令行集群,用于对 Kubernetes 集群和 Minikube 执行命令。

Figure 2: Lens

执行 kubectl get nodes 命令获取所有 节点 node 的详情,在本例中是获取 Minikube 的详情:

C:\>kubectl get nodes
NAME       STATUS   ROLES    AGE     VERSION
minikube   Ready    master   7m57s   v1.18.3

使用 kubectl get all 命令获取默认命名空间下的所有详情:

C:\>kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   7m58s

我们现在已经有一个 Minikube 集群,并准备好了 Kubectl。下一步是安装和配置 Lens,并用示例应用程序来验证。

Lens 的安装和配置

打开 https://k8slens.dev/ ,下载与你的操作系统匹配的安装包。

然后,参照屏幕上的教程来安装 Lens,安装完成后打开 Lens。你会发现在目录中有一个 minikube(图 3)。

Figure 3: Lens catalogue

点击 “minikube” 后,你就进入了 Minikube 的世界,你会爱上它的。

点击 节点 node 获取有关 kubectl get nodes 命令输出的 节点 node 详情。

现在,你可以使用 Lens 了。

Figure 4: Lens cluster

我们现在部署 https://github.com/GoogleCloudPlatform/microservices-demo,这是一个云原生微服务演示应用程序。它有 11 层的微服务应用,是一个基于网络的电子商务应用。

下载这个应用程序,把它解压到与 Minikube 相同的目录。

进入 release 目录,执行以下命令。

kubectl apply -f kubernetes-manifests.yaml

deployment.apps/emailservice created
service/emailservice created
deployment.apps/checkoutservice created
service/checkoutservice created
deployment.apps/recommendationservice created
service/recommendationservice created
deployment.apps/frontend created
service/frontend created
service/frontend-external created
deployment.apps/paymentservice created
service/paymentservice created
deployment.apps/productcatalogservice created
service/productcatalogservice created
deployment.apps/cartservice created
service/cartservice created
deployment.apps/loadgenerator created
deployment.apps/currencyservice created
service/currencyservice created
deployment.apps/shippingservice created
service/shippingservice created
deployment.apps/redis-cart created
service/redis-cart created
deployment.apps/adservice created
service/adservice created

安装过程现在应该已经开始了,不过它需要一些时间来反映出我们使用了 kubectl 命令。

Figure 5: Lens nodes

kubectl get pods
NAME                 READY   STATUS    RESTARTS   AGE
adservice-775d8b9bf5-cp7jr   0/1     Pending   0          8h
cartservice-79749895f5-jrq4d  1/1     Running   0         8h
checkoutservice-5645bf9c65-882m4  1/1   Running  0        8h
currencyservice-545c79d477-8rhg7  1/1  Running   0         8h
emailservice-7cc5c74b4f-hk74s     1/1  Running   0        8h
frontend-9cdf787f5-klfkh    1/1     Running   1          8h
loadgenerator-7b6874cb4c-645v9   1/1  Running   0        8h
paymentservice-5f74bc7b87-l4248  1/1  Running   0        8h
productcatalogservice-6846f59899-v4q4w  1/1  Running  0  8h
recommendationservice-d9c6c8b55-m2x9k  1/1  Running   0  8h
redis-cart-57bd646894-v7kfr    0/1   Pending   0         8h
shippingservice-8685dd9855-pmgjm  1/1  Running  0        8h

表 1 列出了你可以通过 kubectl 来获取信息的几个命令。

Figure 6: Lens pods

描述命令
列出节点kubectl get node
列出集群中的所有资源kubectl get all –all-namespaces
列出部署kubectl get deployment
显示部署的完整状态kubectl describe deployment <deployment_name>
修改集群上的部署kubectl edit deployment <deployment_name>
删除部署kubectl delete deployment <deployment_name>
列出容器荚kubectl get pod
删除容器荚kubectl delete pod <pod_name>
显示容器荚的完整状态kubectl describe pod <pod_name>
在 Shell 中运行一个单容器荚kubectl exec -it <pod_name> /bin/bash
列出机密信息kubectl get secrets
列出服务kubectl get services
列出服务的完整状态kubectl describe services
修改集群中的服务kubectl edit services / kubectl edit deployment <deployment_name>
列出命名空间kubectl get namespace <namespace_name>
打印容器荚日志kubectl logs <pod_name>
打印容器荚中特定容器的日志kubectl logs -c <container_name> <pod_name>

Lens 不仅可以帮你获取表 1 中列出的所有信息,它还可以获取指定集群的信息。我们还能用 Lens 来对 Kubernetes 资源进行编辑和删除操作。

Figure 7: Lens deployments

我们来看下是如何操作的。在 工作负载 Workloads 部分选择 容器荚 Pod (图 6),我们能通过 Lens 来编辑、删除、查看日志、访问 容器荚 Pod 的终端,这是不是很酷?

Figure 8: Lens Replicasets

你可以验证 工作负载 Workloads 区域中所有 部署 deployments (图 7), 工作负载 Workloads 区域中所有 副本 Replicasets (图 8), 配置 Config 区域中所有 密钥 Secrets (图 9),以及 网络 Network 区域中所有 服务 Services 是否都正常(图 10),

Figure 9: Lens Secrets

你可以看到,跳转到所有的资源以及在一个地方高效地查看所有资源就是如此轻松。我们可以用 Lens 修改 YAML 文件,在运行时应用它来查看变更。

Figure 10: Lens Services

对于配置在不同的云服务商部署的多个集群,我们仍可以用 Lens 来进行观察和故障处理。

(题图:MJ/069da8c5-9043-46b3-9b14-87a0ffc6bb35)


via: https://www.opensourceforu.com/2022/09/monitoring-and-debugging-kubernetes-with-lens-desktop/

作者:Mitesh Soni 选题:lkxed 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在这篇文章中,我们将逐步介绍如何安装 Kubernetes 指标服务器。

Kubernetes(k8s)指标服务器是一个组件,用于收集和聚合来自 Kubernetes 集群中各种来源(包括节点和 容器荚 Pod )的指标数据。此数据可用于监控和优化资源利用率、识别潜在问题并提高 Kubernetes 集群的整体性能。

指标服务器收集资源利用率数据,例如集群中节点和容器荚的 CPU 和内存使用情况。它提供了一个 API 端点,可用于查询此数据并检索集群中特定资源的指标。

先决条件
  • 启动并运行 Kubernetes 集群(v1.21 或更高版本)。
  • kubectl 命令行工具已安装,并配置为与你的 Kubernetes 集群交互。
  • 创建和修改 Kubernetes 对象的能力。

事不宜迟,让我们深入了解安装步骤。

步骤 1 下载指标服务器清单

第一步是从 Kubernetes GitHub 仓库下载最新的指标服务器清单文件。使用下面的 curl 命令下载 yaml 文件:

# curl -LO https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

如果你计划在高可用性模式下安装指标服务器,请下载以下清单文件:

# curl https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

步骤 2 修改指标服务器 Yaml 文件

接下来,你需要修改指标服务器的 yaml 文件以设置一些配置选项:

# vi components.yaml

找到 container 下的 args 部分,添加以下行:

- --kubelet-insecure-tls

spec 下,添加以下参数:

hostNetwork: true

保存并关闭文件。

步骤 3 部署指标服务器

现在,我们准备好部署指标服务器,运行以下 kubectl 命令:

# kubectl apply -f components.yaml

步骤 4 验证指标服务器部署

部署指标服务器后,通过检查在 kube-system 命名空间中运行的容器荚状态来验证它的状态:

# kubectl get pods -n kube-system

上面的输出确认指标服务器容器荚已启动并正在运行。

步骤 5 测试指标服务器安装

最后,你可以通过运行以下 kubectl 命令来测试指标服务器:

# kubectl top nodes

此命令应显示集群中每个节点的资源利用率,包括 CPU 和内存使用率。

要查看当前命名空间或特定命名空间的容器荚资源利用率,请运行:

# kubectl top pod
# kubectl top pod -n kube-system

这就是这篇文章的全部内容,我希望你能从中找到有用的信息。请在下面的评论部分发表你的反馈和疑问。

(题图:MJ: Kubernetes container paper art light blue background ultra-detailed topview)


via: https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。

 title=

Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。通过对底层实施细节的抽象,它还可以帮助你在多个云供应商或企业内部系统中进行端到端(构建、测试、部署)应用开发。

Tekton 介绍

Tekton 最初被称为 Knative Build,后来被重组为独立的开源项目,有自己的 治理组织,现在是属于 Linux 基金会 的项目。Tekton 提供了一个集群内的容器镜像构建和部署工作流程,换句话说,它是一个 持续集成 continuous integration (CI)和 持续交付 continuous delivery (CD)服务。它由 Tekton 流水线和几个支持组件如 Tekton CLI、Triggers 和 Catalog 等组成。

Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩展被安装和运行,由一套Kubernetes 定制化资源组成,定义了你为流水线创建和复用的构建块。由于 Tekton 是一种 Kubernetes 原生技术,所以它非常容易扩展。当你需要增加你的工作负载时,你只需向你的集群添加节点就可以了。由于其可扩展的设计和社区贡献的组件库,它也很容易定制。

对于需要 CI/CD 系统来开展工作的开发人员,和为其组织内的开发人员建立 CI/CD 系统的平台工程师,Tekton 是理想选择。

Tekton 组件

构建 CI/CD 流水线的过程非常复杂,因此 Tekton 为每一步都提供工具。以下是 Tekton 提供的主要组件:

  • 流水线 Pipeline: 定义了一组 Kubernetes 自定义资源,作为你用来组装 CI/CD 流水线的构建块。
  • 触发器 Triggers :一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。
  • 命令行 CLI :提供一个名为 tkn 的命令行界面,你可以使用它从终端与 Tekton 进行交互。
  • 仪表盘 Dashboard :是 Tekton 流水线的一个基于网页的图形界面,显示流水线的执行信息。
  • 目录 Catalog :是一个高质量的、由社区贡献的 Tekton 构建块(任务、流水线等),可在你自己的流水线中使用。
  • 中心 Hub :是一个基于网页的图形界面,用于访问 Tekton 目录。
  • 操作员 Operator :是一种 Kubernetes 操作员模式,你可以在 Kubernetes 集群中安装、更新、升级和删除 Tekton 项目。
  • Chains :是一个 Kubernetes 自定义资源定义 Custom Resource Definition (CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。
  • 结果 Results :旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。

Tekton 术语

 title=

  • 步骤 Step :是 CI/CD 工作流程中最基本的实体,例如为 Python 网络应用程序运行一些单元测试或编译一个 Java 程序。Tekton 使用容器镜像执行每个步骤。
  • 任务 Task ::kissing:* 是按特定顺序排列的步骤的集合。Tekton 以 Kubernetes 容器荚 的形式运行任务,其中每个步骤都成为 容器荚 pod 中的一个运行容器。
  • 流水线 Pipelines :是按特定顺序排列的任务的集合。Tekton 把所有任务连接成一个 有向无环图 directed acyclic graph (DAG),并按顺序执行图。换句话说,它创建了一些 Kubernetes 容器荚,并确保每个容器荚按预期成功运行。

 title=

  • 流水线运行 PipelineRun :顾名思义,是一条流水线的具体执行。
  • 任务运行 TaskRun :是一个任务的具体执行。你可以选择在流水线外运行一次任务运行,可以通过它查看任务中每个步骤执行的具体情况。

创建你的 CI/CD 流水线

开始使用 Tekton 的最简单方法是自己编写一个简单的流水线。如果你每天都在使用 Kubernetes,那你可能对 YAML 很熟悉,这正是 Tekton 流水线的定义方式。下面是一个克隆代码库的简单流水线的例子。

首先,创建一个 task.yaml 文件,用你喜欢的文本编辑器打开它。这个文件定义了你要执行的 步骤 Step 。在这个例子中,就是克隆一个仓库,所以我把这个步骤命名为 “clone”。该文件设置了一些环境变量,然后使用一个简单的 shell 脚本来执行克隆。

接下来是 任务 Task 。你可以把步骤看作是一个被任务调用的函数,而任务则设置步骤所需的参数和工作空间。

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
 name: git-clone
spec:
 workspaces:
   - name: output
     description: The git repo will be cloned onto the volume backing this Workspace.
 params:
   - name: url
     description: Repository URL to clone from.
     type: string
   - name: revision
     description: Revision to checkout. (branch, tag, sha, ref, etc...)
     type: string
     default: ""
 steps:
   - name: clone
     image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0"
     env:
       - name: PARAM_URL
         value: $(params.url)
       - name: PARAM_REVISION
         value: $(params.revision)
       - name: WORKSPACE_OUTPUT_PATH
         value: $(workspaces.output.path)
     script: |
      #!/usr/bin/env sh
       set -eu

       CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}"

       /ko-app/git-init \
         -url="${PARAM_URL}" \
         -revision="${PARAM_REVISION}" \
         -path="${CHECKOUT_DIR}"
       cd "${CHECKOUT_DIR}"
       EXIT_CODE="$?"
       if [ "${EXIT_CODE}" != 0 ] ; then
         exit "${EXIT_CODE}"
       fi
       # Verify clone is success by reading readme file.
       cat ${CHECKOUT_DIR}/README.md

创建第二个文件 pipeline.yaml,并用你喜欢的文本编辑器打开它。这个文件通过设置诸如可以运行和处理任务的工作区等重要参数来定义流水线。

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
 name: cat-branch-readme
spec:
 params:
   - name: repo-url
     type: string
     description: The git repository URL to clone from.
   - name: branch-name
     type: string
     description: The git branch to clone.
 workspaces:
   - name: shared-data
     description: |
      This workspace will receive the cloned git repo and be passed
       to the next Task for the repo's README.md file to be read.
 tasks:
   - name: fetch-repo
     taskRef:
       name: git-clone
     workspaces:
       - name: output
         workspace: shared-data
     params:
       - name: url
         value: $(params.repo-url)
       - name: revision
         value: $(params.branch-name)

最后,创建一个 pipelinerun.yaml 文件,用喜欢的文本编辑器打开它。这个文件真正的运行流水线。它调用流水线中定义的参数(继而调用任务文件中定义的任务)。

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
 name: git-clone-checking-out-a-branch
spec:
 pipelineRef:
   name: cat-branch-readme
 workspaces:
   - name: shared-data
     volumeClaimTemplate:
       spec:
         accessModes:
          - ReadWriteOnce
         resources:
           requests:
             storage: 1Gi
 params:
   - name: repo-url
     value: <https://github.com/tektoncd/pipeline.git>
   - name: branch-name
     value: release-v0.12.x

把不同工作分在不同的文件中的好处是,git-clone 任务可以在多条流水线中复用。

例如,假设你想为一个流水线项目做端到端的测试。你可以使用 git-clone 任务 来让每一次测试都基于最新的代码

总结

只要你熟悉 Kubernetes,那 Tekton 对你来说就像其他 Kubernetes 原生应用一样简单。它有很多工具可以帮助你创建流水线并与之交互。如果你喜欢自动化,不妨试试 Tekton!


via: https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton

作者:Savita Ashture 选题:lujun9972 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出