云原生应用架构已经成为现代软件开发和部署的标配。而Kubernetes(简称K8s)作为当前最流行的容器编排平台,掌握它对于开发者来说至关重要。本文将带你从入门到实战,一步步了解K8s,并学会如何构建云原生应用架构。
一、K8s简介
Kubernetes是一个开源的容器编排平台,用于自动化计算机操作,如部署、扩展和管理容器化应用程序。它可以帮助你轻松地管理容器化应用的生命周期,从而实现高效、稳定的部署。
1.1 K8s核心概念
- Pod:K8s中最基本的部署单元,一组容器共享同一个网络命名空间和存储卷。
- ReplicaSet:确保指定数量的Pod副本始终运行。
- Deployment:管理Pods、ReplicaSets和ReplicationControllers,用于扩展或回滚应用程序。
- Service:定义访问Pods的方式,例如通过DNS名称或IP地址。
- Ingress:管理外部到服务的网络访问,通常用于提供HTTPS支持。
1.2 K8s架构
K8s架构主要分为三个层次:
- 控制平面:负责集群的协调和控制,包括API服务器、调度器、控制器管理器等。
- 节点:运行容器的主机,包括Kubelet、容器运行时(如Docker)等。
- Pod:容器化应用的运行实例。
二、K8s入门教程
2.1 环境搭建
首先,你需要安装Docker和K8s。以下是在Ubuntu 20.04上安装K8s的步骤:
- 安装Docker:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
- 安装K8s:
sudo apt-get install -y kubeadm kubelet kubectl
sudo apt-mark hold kubelet kubeadm kubectl
2.2 验证安装
sudo kubectl version
sudo systemctl status kubelet
2.3 运行Hello World应用
创建一个名为hello-world.yaml的文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
name: hello-world
spec:
containers:
- name: hello-world
image: hello-world
运行以下命令:
sudo kubectl apply -f hello-world.yaml
sudo kubectl get pods
此时,你将看到hello-world Pod的状态为Running。
三、K8s实战案例
3.1 部署一个Web应用
假设你有一个Nginx应用,需要将其部署到K8s集群中。以下是一个简单的部署文件nginx-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
运行以下命令部署应用:
sudo kubectl apply -f nginx-deployment.yaml
sudo kubectl get pods
此时,你将看到Nginx应用的Pods状态为Running。
3.2 配置Service和Ingress
接下来,你需要为Nginx应用创建一个Service和Ingress资源,以便通过外部访问。
- 创建Service资源
nginx-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
- 创建Ingress资源
nginx-ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: my-nginx-app.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
运行以下命令部署Service和Ingress:
sudo kubectl apply -f nginx-service.yaml
sudo kubectl apply -f nginx-ingress.yaml
此时,你将可以在浏览器中访问my-nginx-app.com,看到Nginx应用的欢迎页面。
四、总结
本文介绍了K8s的核心概念、入门教程以及实战案例。通过学习本文,相信你已经对K8s有了初步的了解,并能够将其应用于实际项目中。继续深入学习,你将能够构建更加复杂的云原生应用架构。祝你在K8s的道路上越走越远!
