Kubernetes,简称K8s,是一种开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。随着微服务架构的流行,Kubernetes已经成为企业级应用部署的宠儿。本文将带你从入门到精通,轻松应对企业级应用部署。
一、Kubernetes简介
Kubernetes起源于Google的Borg系统,它通过自动化容器的部署、扩展和管理,简化了容器化应用程序的运维工作。Kubernetes的主要特点包括:
- 自动部署和扩展:Kubernetes可以根据需求自动部署和扩展应用程序。
- 服务发现和负载均衡:Kubernetes可以帮助应用程序实现服务发现和负载均衡。
- 存储编排:Kubernetes可以自动挂载各种存储系统。
- 自我修复:Kubernetes可以自动检测和修复应用程序的故障。
二、Kubernetes入门
2.1 环境准备
首先,我们需要准备以下环境:
- 操作系统:推荐使用CentOS 7或Ubuntu 18.04。
- Docker:Kubernetes依赖于Docker,因此需要先安装Docker。
- kubeadm、kubelet和kubectl:kubeadm用于初始化集群,kubelet是集群中的每个节点上运行的组件,kubectl是集群管理的命令行工具。
2.2 初始化集群
使用kubeadm初始化集群,以下命令用于初始化一个单节点集群:
# 初始化master节点
kubeadm init --pod-network-cidr=10.244.0.0/16
# 将当前用户添加到docker组
sudo usermod -aG docker $(whoami)
# 配置kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2.3 安装网络插件
为了实现服务发现和负载均衡,我们需要安装网络插件。以下以Calico为例:
# 安装Calico网络插件
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
三、Kubernetes实战
3.1 部署应用
以下是一个简单的Deployment示例,用于部署Nginx应用:
# 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
部署应用:
kubectl apply -f nginx-deployment.yaml
3.2 查看应用状态
kubectl get pods
3.3 暴露服务
以下是一个简单的Service示例,用于暴露Nginx服务:
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
部署服务:
kubectl apply -f nginx-service.yaml
查看服务信息:
kubectl get svc
3.4 健康检查
Kubernetes支持多种健康检查机制,包括LivenessProbe和ReadinessProbe。以下是一个添加了健康检查的Deployment示例:
# nginx-deployment-with-probes.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment-with-probes
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 10
periodSeconds: 5
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
部署应用:
kubectl apply -f nginx-deployment-with-probes.yaml
四、Kubernetes高级应用
4.1 ConfigMap和Secret
ConfigMap用于管理非敏感配置信息,Secret用于管理敏感信息,如密码、密钥等。
以下是一个创建ConfigMap的示例:
# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
nginx.conf: |
user nginx;
worker_processes 1;
...
部署ConfigMap:
kubectl apply -f configmap.yaml
以下是一个创建Secret的示例:
# secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: nginx-secret
type: Opaque
data:
password: c3VwYXNz
部署Secret:
kubectl apply -f secret.yaml
4.2 Ingress
Ingress用于管理外部访问Kubernetes集群的入口流量。以下是一个创建Ingress的示例:
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: nginx.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
部署Ingress:
kubectl apply -f ingress.yaml
4.3 StatefulSet
StatefulSet用于管理有状态的应用程序,如数据库。以下是一个创建StatefulSet的示例:
# mysql-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql"
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
部署StatefulSet:
kubectl apply -f mysql-statefulset.yaml
五、总结
Kubernetes是一个功能强大的容器编排平台,可以帮助你轻松应对企业级应用部署。本文从入门到实战,介绍了Kubernetes的基本概念、安装配置、应用部署以及高级应用。希望本文能帮助你更好地掌握Kubernetes,并将其应用于实际项目中。
