Kubernetes入门指南:从零到部署应用
Kubernetes入门指南:从零到部署应用
一、Kubernetes简介
1.1 什么是Kubernetes?
Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
Kubernetes的核心功能:
- 自动部署和扩展
- 负载均衡
- 自动修复
- 存储编排
- 服务发现
- 配置管理
1.2 Kubernetes架构
┌─────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Control Plane │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ API │ │ Scheduler│ │ Controller│ │ │
│ │ │ Server │ │ │ │ Manager │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────┐ │
│ │ Data Plane (Nodes) │ │
│ │ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Node1 │ │ Node2 │ │ │
│ │ │ ┌─────┐ │ │ ┌─────┐ │ │ │
│ │ │ │ Pod1 │ │ │ │ Pod2 │ │ │ │
│ │ │ └─────┘ │ │ └─────┘ │ │ │
│ │ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
二、安装Kubernetes
2.1 使用kubeadm安装
# 所有节点执行
# 1. 安装kubeadm、kubelet、kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 添加Kubernetes GPG密钥
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
# 添加Kubernetes仓库
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 更新并安装
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 验证安装
kubectl version --client
kubeadm version
2.2 初始化集群
# Master节点执行
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看集群状态
kubectl get nodes
kubectl get pods -n kube-system
2.3 安装网络插件
# 安装Flannel网络插件
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 或安装Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
2.4 加入工作节点
# 在Worker节点执行
sudo kubeadm join :6443 --token \
--discovery-token-ca-cert-hash sha256:
三、Kubernetes核心概念
3.1 Pod
Pod是Kubernetes中最小的可部署单元:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
3.2 Deployment
Deployment管理Pod的副本:
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:1.21
ports:
- containerPort: 80
3.3 Service
Service为Pod提供稳定的网络访问:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
3.4 Ingress
Ingress提供HTTP和HTTPS路由:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
四、基本命令
4.1 Pod管理
# 查看Pod
kubectl get pods
kubectl get pods -o wide
kubectl describe pod
# 查看日志
kubectl logs
kubectl logs -f
# 进入Pod
kubectl exec -it -- /bin/bash
# 删除Pod
kubectl delete pod
4.2 Deployment管理
# 查看Deployment
kubectl get deployments
kubectl describe deployment
# 扩缩容
kubectl scale deployment nginx-deployment --replicas=5
# 更新镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.22
# 查看 rollout 状态
kubectl rollout status deployment/nginx-deployment
# 回滚
kubectl rollout undo deployment/nginx-deployment
4.3 Service管理
# 查看Service
kubectl get services
kubectl describe service
# 查看endpoint
kubectl get endpoints
4.4 资源状态
# 查看所有资源
kubectl get all
# 查看节点资源
kubectl top nodes
# 查看Pod资源
kubectl top pods
# 查看资源使用
kubectl describe node
五、配置文件示例
5.1 完整应用示例
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DATABASE_URL: "mysql://db:3306"
REDIS_URL: "redis://redis:6379"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: app-config
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
type: ClusterIP
六、常见问题解决
6.1 Pod无法启动
# 1. 检查Pod状态
kubectl describe pod
# 2. 查看事件
kubectl get events --sort-by='.metadata.creationTimestamp'
# 3. 常见原因:
# - 镜像拉取失败
# - 资源不足
# - 配置错误
6.2 Service不可用
# 1. 检查Service状态
kubectl describe service
# 2. 检查Endpoint
kubectl get endpoints
# 3. 检查Pod Selector匹配
kubectl get pods --selector=app=myapp
6.3 网络问题
# 检查网络插件状态
kubectl get pods -n kube-system
# 检查节点状态
kubectl get nodes
kubectl describe node
# 检查网络连通性
kubectl exec -it -- curl
七、总结
本文介绍了Kubernetes的基本概念和入门操作。
核心要点:
下一步学习:
- ConfigMap和Secret
- PersistentVolume
- StatefulSet
- Helm包管理器
- Kubernetes Dashboard
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。





