Kubernetes 基础
本教程介绍了 Kubernetes 集群编排系统的基础知识。每个模块包含关于 Kubernetes 主要特性和概念的一些背景信息。
- 在集群上部署容器化应用程序
- 弹性部署
- 使用新的软件版本,更新容器化应用程序
- 调试容器化应用程序
Kubernetes 可以为你做些什么?
通过现代的 Web 服务,用户希望应用程序能够 24/7 全天候使用,开发人员希望每天可以多次发布部署新版本的应用程序。 容器化可以帮助软件包达成这些目标,使应用程序能够以简单快速的方式发布和更新,而无需停机。Kubernetes 帮助你确保这些容器化的应用程序在你想要的时间和地点运行,并帮助应用程序找到它们需要的资源和工具。Kubernetes 是一个可用于生产的开源平台,根据 Google 容器集群方面积累的经验,以及来自社区的最佳实践而设计。
当您开始使用Kubernetes(以下简称K8s)时,您需要掌握一些基本概念和终端命令。在这里,我们将为您提供一个基本的K8s教程,以帮助您启动您的K8s旅程。
Step 1: 安装 kubectl cli 工具
Kubectl是与K8s进行通信的主要CLI命令行工具,它可以让您管理K8s集群中的各种资源。在安装kubectl之前,您需要安装K8s本地开发工具Node.js和npm。安装kubectl并验证它是否正确安装:
1.1. 下载kubectl二进制文件
从 Kubernetes 发布页面中下载 kubectl 二进制文件:
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
1.2. 添加kubectl执行权限
$ chmod +x ./kubectl
1.3. 将kubectl移动到PATH中
$ sudo mv ./kubectl /usr/local/bin/kubectl
1.4. 验证kubectl是否正确安装
$ kubectl version --client
Step 2: 安装 minikube
Minikube是一个可以在本地运行单个节点K8s集群的工具。它可以让您在本地测试K8s的基本功能,以及保存您在群集中学习的配置和知识。可以通过以下命令安装minikube:
2.1. 下载minikube
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
2.2. 添加minikube执行权限
$ chmod +x minikube-linux-amd64
2.3. 将minikube移动到PATH中
$ sudo mv minikube-linux-amd64 /usr/local/bin/minikube
2.4. 验证minikube是否正确安装
$ minikube version
Step 3: 启动 minikube
在终端中运行命令minikube start启动minikube集群。您可以使用以下命令跟踪minikube启动进度:
$ minikube start --vm-driver=virtualbox
Step 4: 创建一个 K8s deployment
Deployment是一种在Kubernetes中管理Pods的方式。通过创建Deployment,您可以指定有多少Pods可以运行以及内部应用程序如何处理流量。
4.1. 用框架创建 deployment
您可以使用kubectl创建一个新deployment。让我们使用默认的样例“nginx”来创建一个新deployment:
$ kubectl create deployment nginx --image=nginx
成功创建后,您可以使用以下命令检查deployment的状态:
$ kubectl get deployments
4.2. 暴露 Deployment 为 Service
通过在Kubernetes中创建Service对象,可以公开Deployment。Service是一种对象,允许您向Pods公开应用程序的连接。在进行端口转发之前,我们需要将deployment的端口转发到本地端口。接下来,我们将内部端口80暴露到外部端口8080:
$ kubectl expose deployment nginx --port=8080 --target-port=80 --type=NodePort
成功创建后,您可以使用以下命令检查service的状态:
$ kubectl get services
Step 5: 访问您的应用程序
现在,您可以在浏览器中访问应用程序或使用curl访问应用程序:
解如何启动minikube、创建Deployment和Service,以及访问您的应用程序。通过学习更高级的K8s概念和命令,您可以深入了解K8s如何解决复杂的容器管理问题。
Step 6: 清理资源
完成所有K8s任务后,您可以使用以下命令清理minikube环境并删除创建的所有资源:
$ kubectl delete service --all # 删除所有 service
$ kubectl delete deployment --all # 删除所有 deployment
$ minikube stop && minikube delete # 停止并删除 minikube 环境
这将清理所有创建的服务和部署,以及minikube环境本身。这非常重要,因为minikube可能会耗费您的计算机资源,如果不使用时,应将其清理。
通过轻松的6个步骤,您已了解了如何在本地基于minikube启动单节点K8s集群,创建Deployment,暴露Service,并访问您的应用程序。如果您想进一步学习高级Kubernetes概念,例如自扩展和自修复,请参阅Kubernetes官方文档,它包含可以在现实世界基于云的环境中使用的广泛信息和示例。
Step 7: 将应用程序部署到云端K8s
在云端中使用Kubernetes有很多好处,比如弹性扩展、高可用性和自动化部署。云提供商(例如AWS,GCP和Azure)可以帮助您快速启动一个K8s集群,并提供与其它云服务的集成,例如负载均衡器、存储、数据库和日志管理服务。以下是一些基本步骤,帮助您将应用程序部署到云端Kubernetes。
7.1 创建K8s集群和工作节点
使用云提供商提供的K8s服务,您可以轻松创建集群和节点。
7.2. 创建Deployment和Service
与在本地基于minikube部署应用程序相似,您可以使用kubectl在云端K8s中创建Deployment和Service。
7.3. 配置负载均衡
在部署在云端K8s中的应用程序中,您可能需要配置负载均衡来处理流量。您可以使用云提供商的负载均衡器,将流量路由到K8s集群中的服务和Pod。
7.4. 集成云服务
K8s与云提供商的服务(例如存储、数据库和日志管理服务)进行集成。例如,当您创建K8s Deployment时,您可以指定使用云提供商提供的存储服务,作为Deployment中挂载的卷。
7.5. 监控和自修复
在K8s集群中运行应用程序时,必须确保其具有高可用性。为了实现更好的可用性,您可以使用K8s的监视和自修复功能。K8s提供了许多插件和工具,用于监视和诊断应用程序的运行情况,并在遇到故障时自动修复它们。
这些是在云上部署应用程序到Kubernetes的基本步骤。它们与在本地使用minikube的部署有许多相似之处,但涉及到与云提供商提供的服务进行集成以实现最大的效益。
Step 8: 学习Kubernetes的高级概念
掌握K8s的基本概念后,您可以继续学习一些高级概念和主题,以了解如何在复杂的生产环境中使用K8s。
8.1. 水平自动扩展
水平自动扩展是一种自动扩展应用程序的能力,以处理高流量和负载。K8s提供了自动扩展和缩小应用程序Pod的能力,使其始终适应预定义的CPU利用率或流量指标。
8.2. 自愈性
与水平自动扩展类似,自愈性是一种使应用程序自我修复的能力,以在发生故障时保持高可用性。K8s使用不同的方法来检测和解决Pod或节点故障,从而增强应用程序的可靠性。
8.3. 插件和扩展
K8s是可扩展的,并且可以通过插件和扩展进行扩展。它可以集成孵化、存储、网络、服务发现和其他功能,以适应不同的场景和需求。您可以使用K8s API来管理这些插件和扩展。
8.4. 多租户
多租户性是指在单个K8s集群中,多个不同的部门或团队可以使用独立的命名空间管理其应用程序。K8s提供了多种方式来实现多租户,包括基于策略的访问控制、角色和绑定、命名空间限制和网络策略。
8.5. 部署Kubernetes
当您准备在生产环境中使用K8s时,您需要一种灵活的方式来部署Kubernetes集群。这需要创建高可用性的Master节点、工作节点和etcd支持。有许多工具和服务可用于帮助您自动化K8s集群的部署和管理,例如kops、Terraform、Ansible和云平台提供商。
这些概念是Kubernetes的高级主题,可能需要进一步学习和实践,以最大限度地发挥K8s在生产环境中的效益。