Kubernetes 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它已被广泛采用,成为容器编排领域的领先解决方案。

本指南将深入探讨 Kubernetes,帮助您理解 Kubernetes 的工作原理以及如何使用它来管理您的应用程序。

1. 容器编排

1.1 容器编排的定义

容器编排是指将多个容器组织成一个应用程序并管理它们的生命周期的过程。它就像应用的“指挥家”,协调容器的运作,确保应用的高效、稳定运行。

1.2 容器编排的核心功能

  • 容器调度: 将容器部署到集群中的节点上,充分利用资源

  • 容器健康检查: 持续监控容器运行状况,确保应用高可用

  • 容器扩缩容: 根据应用流量动态调整容器数量,实现弹性伸缩

  • 服务发现: 使容器能够相互通信,构建可靠的服务体系

  • 负载均衡: 将流量分发到多个容器上,提升应用性能

1.3 容器编排的显著优势

  • 提高应用可用性和可靠性: 容器编排可以自动重启失败的容器,并根据应用需求进行扩缩容,确保应用始终处于可用状态。

  • 简化应用部署和管理: 容器编排提供统一的管理界面,简化了复杂应用的部署和运维操作。

  • 提高资源利用率: 容器编排可以根据应用需求动态分配资源,提高资源利用率,降低成本。

  • 降低运营成本: 容器编排可以自动化运维工作,减少人工成本。

2. Kubernetes安装

2.1 使用 Minikube 进行本地安装

Minikube 是一个轻量级的工具,可以快速在本地环境中安装和运行 Kubernetes,非常适合学习和测试。

安装步骤:

  1. 安装 Minikube:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64chmod +x minikube-linux-amd64sudo mv minikube-linux-amd64 /usr/local/bin/minikube
  1. 启动 Minikube:

minikube start
  1. 验证安装:

kubectl get nodes

2.2 使用 K3s

K3s 是一个轻量级的 Kubernetes 发行版,资源占用少,适合边缘计算等场景。

安装步骤:

  1. 下载 K3s 安装程序:

curl -sfL https://get.k3s.io | sh -
  1. 启动 K3s:

k3s server
  1. 验证安装:

kubectl get nodes

2.3 使用 Kubespray

Kubespray 是一个 Ansible playbook,可以自动化在多个虚拟机上安装和配置 Kubernetes。

安装步骤:

  1. 准备环境:

  • 安装 Ansible(确保您的系统已安装 Python 2.7 或更高版本)

对于 CentOS/RHEL 系统,需要安装以下依赖项:yum install -y epel-releaseyum install -y ansible对于 Debian/Ubuntu 系统,需要安装以下依赖项:apt-get install -y python-aptapt-get install -y ansible
验证安装ansible --version
  • 克隆 Kubespray 代码

git clone https://github.com/kubernetes-sigs/kubespray.git
  1. 配置 Kubespray:

  • 编辑 inventory/my-cluster.yaml 文件,配置集群参数

---all:  children:    k8s-master:      hosts:        - 192.168.1.100      vars:        ansible_ssh_user: root        ansible_ssh_password: password    k8s-worker:      hosts:        - 192.168.1.101        - 192.168.1.102      vars:        ansible_ssh_user: root        ansible_ssh_password: password
  • 编辑 group_vars/all.yaml 文件,配置 Kubernetes 组件参数

---kubernetes_version: v1.24.1cluster_name: my-clusternetwork_provider: calico
  1. 安装 Kubernetes:

ansible-playbook -i inventory/my-cluster.yaml cluster.yaml

3. Kubernetes 基础概念:深入理解

3.1 Pod:容器的组合体

Pod 是 Kubernetes 中最小的部署单元,可以包含一个或多个容器,这些容器共享相同的网络、存储和资源,方便协同工作。

3.2 Node:应用的宿主机

Node 是 Kubernetes 集群中的工作节点,负责运行 Pod,提供运行环境和资源支持。

3.3 Service:应用的访问入口

Service 为 Pod 提供一个虚拟的 IP 地址和端口号,可以将外部流量路由到 Pod 上,简化应用访问。

3.4 Deployment:Pod 的管理工具

Deployment 是 Kubernetes 中用于部署和管理 Pod 的资源对象。它可以确保始终运行所需数量的 Pod,并根据需要进行扩缩容。

3.5 Namespace:资源的隔离空间

Namespace 可以将 Kubernetes 集群划分为虚拟的子集群,用于隔离不同用户或应用程序的资源,提升安全性。

3.6 其他重要资源:

  • Volume: 用于为 Pod 提供持久化存储。

  • ConfigMap: 用于存储和管理应用程序配置。

  • Secret: 用于存储敏感数据,例如密码和 API 密钥。

图片

3.7 创建和管理基本资源

  • 创建 Deployment:

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-appspec:  replicas: 3  selector:    matchLabels:      app: my-app  template:    metadata:      labels:        app: my-app    spec:      containers:      - name: my-app        image: my-app:latest        ports:        - containerPort: 80
  • 创建 Pod:

apiVersion: v1kind: Podmetadata:  name: my-podspec:  containers:  - name: my-app    image: my-app:latest    ports:    - containerPort: 80
  • 创建 Service:

apiVersion: v1kind: Servicemetadata:  name: my-servicespec:  selector:    matchLabels:      app: my-app  ports:  - protocol: TCP    port: 80    targetPort: 80
  • 创建 Namespace:

apiVersion: v1kind: Namespacemetadata:  name: my-namespace
  • Pod Disruption Budget: 用于控制 Pod 驱逐行为,避免应用中断。

  • Horizontal Pod Autoscaler: 根据应用流量自动扩缩容 Pod 数量。

  • Ingress: 用于控制外部流量如何访问 Kubernetes 集群中的服务。

  • StatefulSet: 用于部署和管理有状态应用程序。

4. Kubernetes 架构:核心组件解析

4.1 Kubernetes 架构概述

Kubernetes 采用主从架构,由控制平面和工作平面两部分组成,职责分明,协同工作。

4.2 控制平面:集群管理中枢

控制平面负责管理集群的配置和状态,包括以下核心组件:

  • etcd: 存储集群配置数据,是 Kubernetes 的“数据库”。

  • API Server: 提供 REST API 接口,用于管理集群,是 Kubernetes 的“控制中心”。

  • Scheduler: 调度 Pod 到 Node 上运行,根据资源情况和策略进行智能匹配。

  • Controller Manager: 负责集群的日常维护工作,例如垃圾回收、Pod 副本控制器等,是 Kubernetes 的“维护人员”。

4.3 工作平面:应用运行载体

工作平面负责运行容器,由以下核心组件组成:

  • Kubelet: 运行在每个 Node 上,负责 Pod 的生命周期管理,是 Kubernetes 在 Node 上的“代理”。

  • Pod: 运行容器的最小单元,可以包含一个或多个容器,实现资源共享。

  • Node: 集群中的工作节点,负责运行 Pod,提供计算、存储、网络等资源。

图片

5. 部署一个简单的 Web 应用

步骤一:构建镜像

Dockerfile创建一个包含 Nginx 和 Web 应用程序的镜像:

FROM nginx:latest
COPY index.html /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]

使用 Docker 命令构建镜像:​​​​​​​

docker build -t my-web-app .
docker push my-web-app

步骤二:创建 Deployment

创建一个 Deployment 来部署 Web 应用程序:​​​​​​​

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-web-appspec:  replicas: 3  selector:    matchLabels:      app: my-web-app  template:    metadata:      labels:        app: my-web-app    spec:      containers:      - name: my-web-app        image: my-web-app:latest        ports:        - containerPort: 80

步骤三:创建 Service

创建一个 Service 为 Web 应用程序提供访问入口:​​​​​​​

apiVersion: v1kind: Servicemetadata:  name: my-web-appspec:  selector:    matchLabels:      app: my-web-app  ports:  - protocol: TCP    port: 80    targetPort: 80

步骤四:验证应用

等待 Deployment 和 Service 生效,可以通过以下命令查看 Pod 状态:

kubectl get pods

预期结果:​​​​​​​

NAME                               READY   STATUS    RESTARTS   AGEmy-web-app-647548787c-55555       1/1     Running   0          1m5smy-web-app-647548787c-77777       1/1     Running   0          1m5smy-web-app-647548787c-88888       1/1     Running   0          1m5s

访问应用:

可以通过浏览器访问 http://<service-ip>:80,即可看到 Web 应用程序页面。

步骤五:扩缩容应用

根据应用流量,可以扩缩容 Pod 数量:​​​​​​​

# 扩容kubectl scale deployment my-web-app --replicas=5
# 缩容kubectl scale deployment my-web-app --replicas=1

Kubernetes 入门总结:开启容器化应用管理之旅

阅读完上述的文章内容,大家可以快速的掌握Kubernetes核心概念和实践技能,可以完美的胜任日常中的一些基本使用,K8S是每一位开发人员必须要学习的技能,可能我们不需要像运维一样掌握的非常深入和精通,但是必要的架构了解以及部署实施方案还是要懂得。否则工作中会遇到各种各样的问题,如果回回请教运维老哥,很影响工作效率。

关注我,我们一起学习更多知识,带你了解更多职场信息内容.

想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐