10分钟带你快速入门K8S
阅读完上述的文章内容,大家可以快速的掌握Kubernetes核心概念和实践技能,可以完美的胜任日常中的一些基本使用,K8S是每一位开发人员必须要学习的技能,可能我们不需要像运维一样掌握的非常深入和精通,但是必要的架构了解以及部署实施方案还是要懂得。否则工作中会遇到各种各样的问题,如果回回请教运维老哥,很影响工作效率。关注我,我们一起学习更多知识,带你了解更多职场信息内容.想要了解更多技术文章请关注
Kubernetes 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它已被广泛采用,成为容器编排领域的领先解决方案。
本指南将深入探讨 Kubernetes,帮助您理解 Kubernetes 的工作原理以及如何使用它来管理您的应用程序。
1. 容器编排
1.1 容器编排的定义
容器编排是指将多个容器组织成一个应用程序并管理它们的生命周期的过程。它就像应用的“指挥家”,协调容器的运作,确保应用的高效、稳定运行。
1.2 容器编排的核心功能
-
容器调度: 将容器部署到集群中的节点上,充分利用资源
-
容器健康检查: 持续监控容器运行状况,确保应用高可用
-
容器扩缩容: 根据应用流量动态调整容器数量,实现弹性伸缩
-
服务发现: 使容器能够相互通信,构建可靠的服务体系
-
负载均衡: 将流量分发到多个容器上,提升应用性能
1.3 容器编排的显著优势
-
提高应用可用性和可靠性: 容器编排可以自动重启失败的容器,并根据应用需求进行扩缩容,确保应用始终处于可用状态。
-
简化应用部署和管理: 容器编排提供统一的管理界面,简化了复杂应用的部署和运维操作。
-
提高资源利用率: 容器编排可以根据应用需求动态分配资源,提高资源利用率,降低成本。
-
降低运营成本: 容器编排可以自动化运维工作,减少人工成本。
2. Kubernetes安装
2.1 使用 Minikube 进行本地安装
Minikube 是一个轻量级的工具,可以快速在本地环境中安装和运行 Kubernetes,非常适合学习和测试。
安装步骤:
-
安装 Minikube:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
-
启动 Minikube:
minikube start
-
验证安装:
kubectl get nodes
2.2 使用 K3s
K3s 是一个轻量级的 Kubernetes 发行版,资源占用少,适合边缘计算等场景。
安装步骤:
-
下载 K3s 安装程序:
curl -sfL https://get.k3s.io | sh -
-
启动 K3s:
k3s server
-
验证安装:
kubectl get nodes
2.3 使用 Kubespray
Kubespray 是一个 Ansible playbook,可以自动化在多个虚拟机上安装和配置 Kubernetes。
安装步骤:
-
准备环境:
-
安装 Ansible(确保您的系统已安装 Python 2.7 或更高版本)
对于 CentOS/RHEL 系统,需要安装以下依赖项:
yum install -y epel-release
yum install -y ansible
对于 Debian/Ubuntu 系统,需要安装以下依赖项:
apt-get install -y python-apt
apt-get install -y ansible
验证安装
ansible --version
-
克隆 Kubespray 代码
git clone https://github.com/kubernetes-sigs/kubespray.git
-
配置 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.1
cluster_name: my-cluster
network_provider: calico
-
安装 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/v1
kind: Deployment
metadata:
name: my-app
spec:
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: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 80
-
创建 Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
matchLabels:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
-
创建 Namespace:
apiVersion: v1
kind: Namespace
metadata:
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/v1
kind: Deployment
metadata:
name: my-web-app
spec:
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: v1
kind: Service
metadata:
name: my-web-app
spec:
selector:
matchLabels:
app: my-web-app
ports:
- protocol: TCP
port: 80
targetPort: 80
步骤四:验证应用
等待 Deployment 和 Service 生效,可以通过以下命令查看 Pod 状态:
kubectl get pods
预期结果:
NAME READY STATUS RESTARTS AGE
my-web-app-647548787c-55555 1/1 Running 0 1m5s
my-web-app-647548787c-77777 1/1 Running 0 1m5s
my-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是每一位开发人员必须要学习的技能,可能我们不需要像运维一样掌握的非常深入和精通,但是必要的架构了解以及部署实施方案还是要懂得。否则工作中会遇到各种各样的问题,如果回回请教运维老哥,很影响工作效率。
关注我,我们一起学习更多知识,带你了解更多职场信息内容.
想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料
更多推荐
所有评论(0)