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、标签等查看云支出。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 步骤 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 这将下载 AWX 海图并将其安装在 awx 命名空间中的 Kubernetes 集群上。安装过程可能需要几分钟，请耐心等待。步骤 3：验证 AWX 操作员安装安装成功后，你可以通过运行以下命令来验证 AWX 操作员 operator 状态：$ sudo kubectl get pods -n awx 你应该看到这样的东西：步骤 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 保存并退出文件。重要说明：确保文件夹 /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 要创建 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 保存并关闭文件。执行以下 kubectl 命令来部署 awx 实例：$ kubectl create -f ansible-awx.yaml 等待几分钟，然后检查 awx 命名空间中的容器荚状态。$ kubectl get pods -n awx 步骤 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 上可用。默认情况下，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 输入凭据后单击登录。恭喜！ 你已在 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 核以上 CPU2GB RAM20GB 空闲硬盘空间能连接网络容器或虚拟机管理器，如 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）。使用 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 安装完成后，安装 kubectl（https://kubernetes.io/docs/tasks/tools/）。它是一个命令行集群，用于对 Kubernetes 集群和 Minikube 执行命令。执行 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）。点击 “minikube” 后，你就进入了 Minikube 的世界，你会爱上它的。点击 节点 node 获取有关 kubectl get nodes 命令输出的 节点 node 详情。现在，你可以使用 Lens 了。我们现在部署 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 命令。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 来获取信息的几个命令。描述命令列出节点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 资源进行编辑和删除操作。我们来看下是如何操作的。在 工作负载 Workloads 部分选择 容器荚 Pod （图 6），我们能通过 Lens 来编辑、删除、查看日志、访问 容器荚 Pod 的终端，这是不是很酷？你可以验证 工作负载 Workloads 区域中所有 部署 deployments （图 7）， 工作负载 Workloads 区域中所有 副本 Replicasets （图 8）， 配置 Config 区域中所有 密钥 Secrets （图 9），以及 网络 Network 区域中所有 服务 Services 是否都正常（图 10），你可以看到，跳转到所有的资源以及在一个地方高效地查看所有资源就是如此轻松。我们可以用 Lens 修改 YAML 文件，在运行时应用它来查看变更。对于配置在不同的云服务商部署的多个集群，我们仍可以用 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 在 Kubernetes 中编写你的第一条 CI/CD 流水线
Tekton 是一个用于创建持续集成和持续交付（CI/CD）系统的 Kubernetes 原生开源框架。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 术语 步骤 Step ：是 CI/CD 工作流程中最基本的实体，例如为 Python 网络应用程序运行一些单元测试或编译一个 Java 程序。Tekton 使用容器镜像执行每个步骤。 任务 Task ：:kissing:* 是按特定顺序排列的步骤的集合。Tekton 以 Kubernetes 容器荚 的形式运行任务，其中每个步骤都成为 容器荚 pod 中的一个运行容器。 流水线 Pipelines ：是按特定顺序排列的任务的集合。Tekton 把所有任务连接成一个 有向无环图 directed acyclic graph （DAG），并按顺序执行图。换句话说，它创建了一些 Kubernetes 容器荚，并确保每个容器荚按预期成功运行。 流水线运行 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中国 荣誉推出
你是否正在寻找有关如何使用 Kubespray 安装 Kubernetes（k8s）的简单指南？此页面上的分步指南将向你展示如何在 Linux 系统上使用 Kubespray 安装 Kubernetes 集群。Kubespray 是一个自由开源的工具，它提供了 Ansible 剧本 playbook 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程，允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。它支持一系列操作系统，包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux（RHEL），它可以在各种平台上部署 Kubernetes，包括裸机、公共云和私有云。在本指南中，我们使用以下实验室：Ansible 节点（Kubespray 节点）：最小安装的 Ubuntu 22.04 LTS（192.168.1.240）3 个控制器节点：最小安装的 Rocky Linux 9（192.168.1.241/242/243）2 个工作节点：最小安装的 Rocky Linux 9（192.168.1.244/245）Kubespray 的最低系统要求主节点：1500 MB RAM、2 个 CPU 和 20 GB 可用磁盘空间工作节点：1024 MB、2 个 CPU、20 GB 可用磁盘空间Ansible 节点：1024 MB、1 个 CPU 和 20 GB 磁盘空间每个节点上的互联网连接拥有 sudo 管理员权限事不宜迟，让我们深入了解安装步骤。步骤 1）配置 Kubespray 节点登录到你的 Ubuntu 22.04 系统并安装 Ansible。运行以下一组命令：$ sudo apt update $ sudo apt install git python3 python3-pip -y $ git clone https://github.com/kubernetes-incubator/kubespray.git $ cd kubespray $ pip install -r requirements.txt 验证 Ansible 版本，运行：$ ansible --version 创建主机清单，运行以下命令，不要忘记替换适合你部署的 IP 地址：$ cp -rfp inventory/sample inventory/mycluster $ declare -a IPS=(192.168.1.241 192.168.1.241 192.168.1.242 192.168.1.243 192.168.1.244 192.168.1.245) $ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]} 修改清单文件，设置 3 个控制节点和 2 个工作节点：$ vi inventory/mycluster/hosts.yaml 保存并关闭文件。查看并修改文件 inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml 中的以下参数：kube_version: v1.26.2 kube_network_plugin: calico kube_pods_subnet: 10.233.64.0/18 kube_service_addresses: 10.233.0.0/18 cluster_name: linuxtechi.local 要启用 Kuberenetes 仪表板和入口控制器等插件，请在文件 inventory/mycluster/group_vars/k8s_cluster/addons.yml 中将参数设置为已启用：$ vi inventory/mycluster/group_vars/k8s_cluster/addons.yml dashboard_enabled: true ingress_nginx_enabled: true ingress_nginx_host_network: true 保存并退出文件。步骤 2）将 SSH 密钥从 Ansible 节点复制到所有其他节点首先在你的 Ansible 节点上为你的本地用户生成 SSH 密钥：$ ssh-keygen 使用 ssh-copy-id 命令复制 SSH 密钥：$ ssh-copy-id sysops@192.168.1.241 $ ssh-copy-id sysops@192.168.1.242 $ ssh-copy-id sysops@192.168.1.243 $ ssh-copy-id sysops@192.168.1.244 $ ssh-copy-id sysops@192.168.1.245 还要在每个节点上运行以下命令：$ echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops 步骤 3）禁用防火墙并启用 IPV4 转发要在所有节点上禁用防火墙，请从 Ansible 节点运行以下 ansible 命令:$ cd kubespray $ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo systemctl stop firewalld && sudo systemctl disable firewalld" 运行以下 ansible 命令以在所有节点上启用 IPv4 转发和禁用交换:$ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf" $ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab && sudo swapoff -a" 步骤 4）启动 Kubernetes 部署现在，我们都准备好开始 Kubernetes 集群部署，从 Ansible 节点运行下面的 Ansible 剧本：$ cd kubespray $ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml 现在监控部署，可能需要 20 到 30 分钟，具体取决于互联网速度和硬件资源。部署完成后，我们将在屏幕上看到以下输出：很好，上面的输出确认部署已成功完成。步骤 5）访问 Kubernetes 集群登录到第一个主节点，切换到 root 用户，在那里运行 kubectl 命令：$ sudo su - # kubectl get nodes # kubectl get pods -A 输出：完美，上面的输出确认集群中的所有节点都处于就绪状态，并且所有命名空间的 容器荚 Pod 都已启动并正在运行。这表明我们的 Kubernetes 集群部署成功。让我们尝试部署基于 Nginx 的部署并将其公开为节点端口，运行以下 kubectl 命令：$ kubectl create deployment demo-nginx-kubespray --image=nginx --replicas=2 $ kubectl expose deployment demo-nginx-kubespray --type NodePort --port=80 $ kubectl get deployments.apps $ kubectl get pods $ kubectl get svc demo-nginx-kubespray 以上命令的输出：现在尝试使用工作节点的 IP 地址和节点端口（30050）访问此 Nginx 应用。使用以下 curl 命令或 Web 浏览器访问此应用。$ curl 192.168.1.245:30050 或者，完美，这证实了应用可以在我们的集群之外访问。步骤 6）Kubernetes 仪表板（GUI）要访问 Kubernetes 仪表板，让我们首先创建服务帐户并分配管理员权限，以便它可以使用令牌访问仪表板。在 kube-system 命名空间中创建名为 “admin-user” 的服务帐户：$ vi dashboard-adminuser.yml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system 保存并关闭文件。$ kubectl apply -f dashboard-adminuser.yml serviceaccount/admin-user created 创建集群角色绑定：$ vi admin-role-binding.yml 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 apply -f admin-role-binding.yml clusterrolebinding.rbac.authorization.k8s.io/admin-user created 现在，为管理员用户创建令牌：$ kubectl -n kube-system create token admin-user 复制此令牌并将其放在安全的地方，因为我们将使用令牌登录 Kubernetes 仪表板。使用以下 ssh 命令从你的系统连接到第一个主节点：$ ssh -L8001:localhost:8001 sysops@192.168.1.241 注意：替换适合你环境的 IP 地址。登录后，切换到 root 用户并运行 kubectl proxy 命令：$ sudo su - # kubectl proxy Starting to serve on 127.0.0.1:8001 打开系统的网络浏览器，如下设置代理：完成代理设置后，将以下网址粘贴到浏览器中：http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#/login 选择令牌登录并粘贴你在上面为管理员用户生成的令牌，然后单击“ 登录 Sign in ”。这就是本指南的全部内容，我希望你能从中找到有用的信息。请在下面的评论部分中发表你的疑问和反馈。via: https://www.linuxtechi.com/install-kubernetes-using-kubespray/作者：Pradeep Kumar 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在这篇文章中，我们将逐步介绍如何在 RHEL 8、Rocky Linux 8 或 AlmaLinux 8 上安装 MiniKube。MiniKube 是一个跨平台的开源工具，可以让你在本地机器上部署单节点 Kubernetes 集群。Kubernetes，也被称为 k8s，或简称 Kube，是一个开源的容器编排平台，用于容器的自动化扩展和部署。MiniKube 集群帮助开发人员和管理员在集群中构建他们的测试环境。MiniKube 的先决条件最小化安装的 RHEL 8 或 Rocky Linux 8 或 AlmaLinux 8本地配置的 RHEL 8 仓库或订阅至少 2GB RAM 和 2 个 vCPU20GB 硬盘空间具有管理员身份的 sudo 用户稳定的互联网连接Docker 或虚拟机管理器，如 VirtualBox、KVM 和 VMware 等在这篇文章中，我们将使用 Docker 作为 MiniKube 的驱动程序。满足所有先决条件后，现在是时候卷起袖子动手了。步骤 1）启用官方 Docker 仓库要启用 Docker 官方仓库，运行：$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo $ sudo dnf repolist 步骤 2）安装 Docker CE（社区版）运行以下 dnf 命令来安装 Docker 及其依赖项：$ sudo dnf install docker-ce docker-ce-cli containerd.io -y 输出：安装 Docker 后启动并启用它的服务，运行以下 systemctl 命令：$ sudo systemctl start docker $ sudo systemctl start docker 允许你的本地用户在没有 sudo 的情况下运行 docker 命令，运行：$ sudo usermod -aG docker $USER $ newgrp docker 步骤 3）安装 kubectl 二进制文件kubectl 是一个命令行工具，它通过 API 与 Kubernetes 集群进行交互。我们使用 kubectl 部署应用。默认情况下，kubectl 不包含在 RHEL 8 、Rocky Linux 8 或 AlmaLinux 8 软件包仓库中。因此，我们将使用下面的命令手动安装它：$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" $ sudo cp kubectl /usr/local/bin/ && sudo chmod +x /usr/local/bin/kubectl $ kubectl version --client 以上命令的输出如下所示：步骤 4）下载 MiniKube 二进制文件并启动集群安装 kubectl 后，让我们使用以下命令下载并安装 MiniKube 二进制文件：$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 $ sudo install minikube-linux-amd64 /usr/local/bin/minikube 现在使用下面的命令启动 MiniKube 集群：$ minikube start --driver docker 上面的输出确认 minikube 命令已经使用 docker 作为驱动程序启动了单节点 Kubernetes 集群。运行下面的 minikube 命令来验证本地 Kubernetes 集群的状态：$ minikube status minikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured $ $ minikube ip 192.168.49.2 $ 要停止 MiniKube 集群，请执行：$ minikube stop 执行 kubectl 命令查看集群和节点信息：$ kubectl cluster-info $ kubectl get nodes 步骤 5）测试和验证 Kubernetes 集群为了测试 Kubernetes 集群，让我们尝试使用 echo 服务器镜像创建 k8s 部署，它相当于 HTTP Web 服务器并将其作为服务暴露在端口 8080 上：$ kubectl create deployment test-minikube --image=k8s.gcr.io/echoserver:1.10 deployment.apps/test-minikube created $ 要访问 test-minikube 部署，将其公开为服务，运行以下命令：$ kubectl expose deployment test-minikube --type=NodePort --port=8080 service/test-minikube exposed $ 运行以下 kubectl 命令以获取上面创建的部署、 容器荚 pod 和服务信息：$ kubectl get deployment,pods,svc 要访问服务，请通过运行下面的命令获取其 URL：$ minikube service test-minikube --url http://192.168.49.2:32291 $ $ curl http://192.168.49.2:32291/ 太好了，这意味着我们的 Kubernetes 集群工作正常，因为我们能够访问我们的示例应用。步骤 6）启用 MiniKube 插件MiniKube 提供插件，可以为我们的集群添加额外的功能。要列出所有可用的插件，运行：$ minikube addons list Kubernetes 附带一个仪表板，可让你管理集群。在 MiniKube 中，仪表板已作为插件添加。所以要启用它，运行：$ minikube addons enable dashboard 还要启用 nginx 入口控制器，运行：$ minikube addons enable ingress 要访问仪表板，运行：$ minikube dashbaord --url 这将在你系统的浏览器中启动仪表板。就是这些了。我们已经成功地在 RHEL 8、Rocky Linux 8 或 AlmaLinux 8 上使用 MiniKube 安装了 Kubernetes。欢迎你在下面的评论部分分享你的反馈和意见。via: https://www.linuxtechi.com/install-minikube-on-rhel-rockylinux-almalinux/作者：Pradeep Kumar 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如何用 Kubeadm 在 Debian 11 上安装 Kubernetes 集群
你是否在寻找一份在 Debian 11（Bullseye）上安装 Kubernetes 集群的简易指南？这份分步指南将向你展示如何使用 Kubeadm 工具在 Debian 11 上安装 Kubernetes 集群。Kubernetes（k8s）集群包含主控节点和工作节点，用于运行容器化的应用程序。主控节点作为控制平面，工作节点为实际工作负载提供环境。前置条件：已安装 Debian 112 CPU / vCPU2 GB RAM20 GB 空闲硬盘空间有管理员权限的 sudo 用户稳定的网络连接实验环境配置：在本文中，我使用了 3 个 Debian 11 系统的节点，配置如下主控节点（k8s-master） – 192.168.1.236工作节点 1（k8s-worker1） – 192.168.1.237工作节点 2（k8s-worker2） – 192.168.1.238事不宜迟，我们直接进入安装步骤。1、设置主机名和更新 /etc/hosts 文件在主控节点和工作节点上使用 hostnamectl 命令来设置主机名：$ sudo hostnamectl set-hostname "k8s-master" // 在主控节点运行 $ sudo hostnamectl set-hostname "k8s-worker1" // 在工作节点 1 运行 $ sudo hostnamectl set-hostname "k8s-worker2" // 在工作节点 2 运行 在所有节点的 /etc/hosts 文件末尾添加下面几行内容：192.168.1.236 k8s-master 192.168.1.237 k8s-worker1 192.168.1.238 k8s-worker2 2、在所有节点上关闭交换分区我推荐关闭交换分区，以便更丝滑地使用 kubelet。在所有节点上执行以下命令来关闭交换分区：$ sudo swapoff -a $ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 3、配置 Kubernetes 集群相关的防火墙规则如果你的操作系统防火墙是打开的，请分别在主控节点和工作节点允许以下的端口。在主控节点，执行：$ sudo ufw allow 6443/tcp $ sudo ufw allow 2379/tcp $ sudo ufw allow 2380/tcp $ sudo ufw allow 10250/tcp $ sudo ufw allow 10251/tcp $ sudo ufw allow 10252/tcp $ sudo ufw allow 10255/tcp $ sudo ufw reload 在工作节点，执行：$ sudo ufw allow 10250/tcp $ sudo ufw allow 30000:32767/tcp $ sudo ufw reload 注意：如果你的 Debian 11 系统防火墙是关闭的，可以跳过此步骤。4、在所有节点安装 Containerd 运行时Containerd 是容器运行时的行业标准，所有节点必须安装 Containerd。先在所有节点上配置如下的核心参数，再安装 Containerd。$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF $ sudo modprobe overlay $ sudo modprobe br_netfilter $ cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF 运行如下命令，以使上面的更改生效：$ sudo sysctl --system 现在，在所有节点上运行如下 apt 命令来安装 Conatinerd。$ sudo apt update $ sudo apt -y install containerd 在所有节点上运行如下命令来配置 Containerd：$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1 在所有节点上设置 cgroupdriver 为 systemd，编辑 /etc/containerd/config.toml 文件，找到 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 部分，添加一行内容：SystemdCgroup = true：$ sudo vi /etc/containerd/config.toml 保存并退出文件。在所有节点上重启并启用 containerd 服务：$ sudo systemctl restart containerd $ sudo systemctl enable containerd 5、添加 Kubernetes Apt 库执行以下命令，添加 Kubernetes Apt 库：$ sudo apt install gnupg gnupg2 curl software-properties-common -y $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/cgoogle.gpg $ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" 6、在所有节点上安装 kubelet、kubectl 和 kubeadm在所有节点上执行以下 apt 命令，安装 Kubernetes 集群组件，如 kubelet、kubectl 以及 kubeadm。$ sudo apt update $ sudo apt install kubelet kubeadm kubectl -y $ sudo apt-mark hold kubelet kubeadm kubectl 7、使用 Kubeadm 创建 Kubernetes 集群现在我们可以创建 Kubernetes 集群了，在主控节点上执行以下命令：$ sudo kubeadm init --control-plane-endpoint=k8s-master 命令输出：出现以上内容，说明控制平面初始化成功。在输出中，有普通用户与集群交互的命令，也有把任何工作节点加入到集群的命令。要开始与集群进行交互，请在主控节点上运行以下命令：$ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config 执行以下 kubectl 命令来获取节点和集群的信息：$ kubectl get nodes $ kubectl cluster-info 以上命令的输出：通过执行 kubeadm join 命令来把两个工作节点加入到集群。注意：请从 kubeadm init 命令的输出中复制完整的命令。在我的例子中，命令如下：$ sudo kubeadm join k8s-master:6443 --token ta622t.enl212euq7z87mgj \ --discovery-token-ca-cert-hash sha256:2be58f54458d0e788c96b8841f811069019161f9a3dd8502a38c773e5c6ead17 在工作节点 1 上的输出如下：在工作节点 2 上的输出如下：在主控节点上执行以下命令，检查节点的状态：$ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master NotReady control-plane 23m v1.25.0 k8s-worker1 NotReady <none> 9m27s v1.25.0 k8s-worker2 NotReady <none> 2m19s v1.25.0 $ 为了使节点状态变为 ready，我们需要安装 容器荚 Pod 网络插件，如 Calico 或 flannel。8、安装 Calico Pod 网络插件在主控节点上执行以下命令安装 Calico：$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml 输出：在所有节点上执行以下命令，配置防火墙允许 Calico 的端口：$ sudo ufw allow 179/tcp $ sudo ufw allow 4789/udp $ sudo ufw allow 51820/udp $ sudo ufw allow 51821/udp $ sudo ufw allow 4789/udp $ sudo ufw reload 执行以下命令检查下 Calico 的状态：$ kubectl get pods -n kube-system 完美！现在再检查下节点状态：非常棒！上面的输出说明主控节点和工作节点的状态都是 ready。现在这个集群可以正常工作了。9、检查 Kubernetes 集群安装是否正确我们尝试通过 deployment 命令来部署基于 Nginx 的应用程序，来验证 Kubernetes 集群的安装是否正确。执行以下命令：$ kubectl create deployment nginx-app --image=nginx --replicas 2 $ kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80 $ kubectl describe svc nginx-web-svc 以上命令的输出：使用以下的 curl 命令通过节点端口 30036 来访问基于 nginx 的应用程序。注意：在 curl 命令中，可以使用两个工作节点任一的主机名。$ curl http://k8s-worker1:30036 以上的输出说明我们可以正常访问基于 nginx 的应用程序了。以上为全部内容。希望本文对你有用，参照本文可以在 Debian 11 上正常安装 Kubernetes 集群。如有任何问题，请在下面评论区告诉我。via: https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/作者：Pradeep Kumar 选题：lkxed 译者：lxbwolf 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Kubernetes 的优势不仅在于它能够做什么，还在于知道它能为你做什么。在 树莓派家庭实验室上运行 Kubernetes 的 5 个理由 这篇文章中，我解释了为什么推荐在家里使用 Kubernetes。其中的理由相对来说会有点随意，并且主要于关注结果。除了 Kubernetes 好用的功能之外，还有其他几个应将 Kubernetes 包含在你自己的计算机的理由。（LCTT 译注： 家庭实验室 Homelab 指的是安置在你家里的一个服务器或者多服务器的组合配置。在之上托管了多个服务和虚拟系统，以此来进行测试、开发，或者提供家庭功能用途。）1、Kubernetes 是基于 Linux 而建立的Kubernetes 有很高的知名度。对于一些人来说，Kubernetes 是一种神秘技术，有一个不好念的名字；而对另一些人来说，Kubernetes 就好像是牧羊犬放牧羊群一样，可以帮助他们管理过多的容器；对于其它人来说，Kubernetes 是一种 云 cloud 的操作系统，是 实效云开发 effective cloud development 的一个有用的界面；对于大多数人来说，Kubernetes 可能是他们从未听说过的后端软件。正如人们所想的那样，Kubernetes 具有所有这些能力，甚至有更多的功能。并非每个人都以相同的方式使用 Kubernetes，但如果你主要的工作是系统管理，你会发现 Kubernetes 只是又一个 Linux 命令。我有一件 T 恤，上面写着 “ 容器就是 Linux Containers are Linux ”，它的意思是显而易见的。容器技术使用 cgroup，来运行包含一个或一组应用程序的最小 Linux 操作系统镜像。当你运行容器时，实际上你就是在运行 Linux。虽然 Kubernetes 能在许多平台上使用，但 Kubernetes 管理的是 Linux 容器。当你通过终端与 Kubernetes 交互时，就像是使用 Linux：有命令、选项、参数和语法。运行 Kubernetes 的 kubeadm 或（在 OKD 或 OpenShift 上）运行 oc 命令，你会感觉到很熟悉，是因为它们的工作方式与你习惯使用的任何其他 Linux 命令一样。开始时看似陌生的东西很快就会变得自然，任何有兴趣在终端上花时间的 Linux 用户都可以在 Kubernetes 中探索到许多有趣的东西。2、Kubernetes 很灵活在过去，Kubernetes 有点死板，因为从本质上来说，它仅能支持一个 容器运行时 container runtime 。这个规定非常严格，以至于今天需要一个 硬编码的垫片 hardcoded shim ，才能绕过这个遗留问题。幸运的是，如今 Kubernetes 已经变得足够灵活，可以满足管理员的许多不同需求了。Podman 和 CRI-O 可用作于容器引擎，它们都可以与 systemd 集成（这是因为 Kubernetes 的底层都是 Linux）。你可以自己选择 Kubernetes 所使用的文件系统、集群大小和构造、监控工具、镜像、编程语言等等配置。甚至现在有些人说 Kubernetes 有 太多 的选择了。3、学习 Kubernetes 有助于个人发展容器是一个硕果累累的事物，它们会快速地成倍增长，这就是它的设计。容器旨在扩展，它们通过生成克隆来扩展。将容器分组（称为 “ 容器荚 pod ”），并自动管理容器荚的生命周期，这就是 Kubernetes 运用的方式。它正在改变服务器的运行方式。你可能不需要无限扩展的容器集合，也不需要任何东西来帮助你管理正运行的一或两个容器。但是，如果你希望受益于处理容器荚的能力，那么 Kubernetes 正是你需要学习的工具。随着越来越多的公司和组织走向全球，拥抱 数字化转型，Kubernetes 正在成为 IT 领域的必备技能。如果你想要在这个领域中发展，那么现在开始学习 Kubernetes 并熟悉它的常见问题及其解决方案，将会是一项很好的投资。4、Kubernetes 让容器更有意义你可能还记得几年前，当开源项目刚开始将它们的代码作为容器镜像分发时，对于许多人来说，容器这一概念是令人费解的：没有多少系统管理员真正理解 容器是什么，或者明白容器的边界在哪里、如何进入容器，以及为什么数据不能存在于容器内。现在，IT 界（包括开发人员在内）都对容器的概念都十分熟悉了。对于现代的 CI/CD 工作流程 来说，交付给容器十分有意义。不过，对于系统管理员来说，容器的优势如下：安装容器（理论上）比等待发行版更新其软件包更为容易，而且容器可以扩展。然而，在你使用 Kubernetes 之前，你很可能都不会真正地感受到这些好处。当你开始使用 Kubernetes 和相关工具管理容器之前，持续交付容器的好处和容器的扩展能力可能只是你从文章里面读过的想法。将容器集成到你管理服务器的方式中，你会突然明白 Kubernetes 中令人兴奋的是什么。你可以试试看这个最基本的测试：只需在容器中启动你最喜欢的 Web 服务器，创建一个容器荚，然后使用来自 Apache JMeter 的流量访问你的服务器，然后观察容器响应。5、Kubernetes 是云原生的如果你主要做的是软件开发，而不是系统管理，那么 Kubernetes 也是 网页应用程序 web apps 的一个很好的平台。我们现在都在使用网页应用程序，尽管大多数人只是将它们视为 “ 网站 website ”。网络拥有庞大的用户群，因此通过浏览器提供开源的应用程序是非常有意义的。有一些很棒的开源应用程序在网络上运行，其中许多的应用程序都以容器的形式分发的，它们可以支持简单的安装和持续的用户体验。Kubernetes 的其他优势：Kubernetes 很有意思你还记得你还是 Linux 新手的时候吗？对于一些人来说，那可能是几十年前的事了，而对于其他人来说，可能是不久的过去。不过，对于所有人来说，学习一项新事物会是一个有趣的挑战。如果你达到了认为 “Linux 的安装与其说是一个挑战，不如说是一个麻烦” 的程度，那么你可以尝试一下构建一个 Kubernetes 集群。它会让你回忆起你忘记的各种概念：如何修改纯文本（特别是 YAML 格式的）配置文件，如何配置网络接口和网络，如何路由流量，知道一个后端相对于另一个后端的优缺点，在 --dry-run 测试之后运行 --dry-run 测试，试探性地按回车键来确定你是否做对了。老实说，使用 Kubernetes 很有趣。如果你想构建自己的基础架构，没有什么比构建你自己的 Kubernetes 集群更好的了。Kubernetes 集群将会为你打开一个全新的世界。你很快就会成为一名云架构师，学会完善你的开放云，在容器中安装令人惊叹的开源 Web 应用程序，也能为你的家人和朋友提供访问权限。你自己就能得到解决方案。这真是太棒啦。快来试试看 Kubernetes 吧对 Kubernetes 的初学者来说，Kubernetes 似乎很难快速上手，因为 Kubernetes 是一个新的工具，会让你感到有点害怕，而且它还需要云服务。但是，以下有几种方法可以让你开始 Kubernetes 体验。首先，安装 Minikube 或 Minishift。这两个工具都允许你在自己的计算机上运行 Kubernetes 的本地实例。虽然这种方式比不上“构建一个集群并与你的朋友共享”那么令人满意，但它是一种让你熟悉 Kubernetes 环境、命令和工具包的很好且安全的方式。当你准备进一步研究 Kubernetes 后，请进一步阅读 Chris Collins 的《使用树莓派构建 Kubernetes 集群》 的文章。之后，再下载我们的免费电子书 《在你树莓派家庭实验室上运行 Kubernetes》。在不知不觉中，你会发现自己也明白了“容器就是 Linux”的含义。via: https://opensource.com/article/21/6/kubernetes-linux-homelab作者：Seth Kenlon 选题：lujun9972 译者：chai001125 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出