Linux容器大师:K8s集群部署入门指南
引言
在云原生时代,Kubernetes就像一位"集群调度大师"🎮,轻松管理成千上万的容器化应用!本文将带你从零开始搭建生产级K8s集群,从基础概念到实战部署,从核心组件到安全运维。无论你是要搭建开发环境还是生产集群,这些技能都将助你轻松驾驭容器编排的浪潮!准备好你的Linux服务器,让我们一起探索K8s的奥秘吧~ 🌊
一、Kubernetes 基础概念
1.1 核心组件
组件 | 功能描述 |
---|---|
Master节点 | 集群控制平面 |
Node节点 | 运行工作负载的机器 |
Pod | Kubernetes最小部署单元 |
Deployment | 管理Pod副本的声明式方式 |
Service | 定义Pod访问策略 |
kubelet | 节点代理,管理Pod生命周期 |
kube-proxy | 维护节点网络规则 |
1.2 基本工作流程
- 用户通过kubectl提交YAML配置
- API Server接收请求并验证
- Scheduler分配Pod到合适Node
- kubelet创建并监控Pod
- kube-proxy配置网络规则
二、集群部署方案选择
2.1 本地开发环境
工具 | 特点 | 适用场景 |
---|---|---|
Minikube | 单节点集群,简单易用 | 本地开发测试 |
Kind | 使用Docker容器作为节点 | CI/CD测试 |
MicroK8s | 轻量级生产级K8s | 边缘计算/IoT |
2.2 生产环境部署
方案 | 特点 | 适用场景 |
---|---|---|
kubeadm | 官方工具,灵活可控 | 自定义集群 |
kOps | 自动化生产级集群 | AWS等云环境 |
RKE | Rancher的K8s发行版 | 混合云部署 |
三、使用kubeadm部署集群
3.1 环境准备(所有节点)
# 禁用swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab# 安装Docker
sudo apt-get update && sudo apt-get install -y docker.io
sudo systemctl enable --now docker# 安装kubeadm/kubelet/kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb 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
3.2 初始化Master节点
sudo kubeadm init \--pod-network-cidr=10.244.0.0/16 \--apiserver-advertise-address=<master-ip># 按照输出提示配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
3.3 加入Worker节点
# 在Master节点上获取join命令
kubeadm token create --print-join-command# 在Worker节点上执行输出的join命令
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>
四、基本操作入门
4.1 集群状态检查
# 查看节点状态
kubectl get nodes -o wide# 查看所有资源
kubectl get all --all-namespaces# 查看集群信息
kubectl cluster-info
4.2 部署第一个应用
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
# 创建部署
kubectl apply -f nginx-deployment.yaml# 查看部署状态
kubectl get deployments
kubectl get pods -o wide
4.3 暴露服务
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: NodePort
# 创建服务
kubectl apply -f nginx-service.yaml# 获取服务访问信息
kubectl get svc nginx-service# 测试访问(使用输出的NodePort)
curl http://<node-ip>:<node-port>
五、核心概念深入
5.1 Pod生命周期
- Pending:调度中
- Running:至少一个容器运行中
- Succeeded:所有容器成功终止
- Failed:至少一个容器异常终止
- Unknown:状态无法获取
5.2 控制器类型
类型 | 用途 |
---|---|
Deployment | 无状态应用部署 |
StatefulSet | 有状态应用部署 |
DaemonSet | 每个节点运行一个Pod |
Job/CronJob | 批处理任务 |
5.3 服务发现
# 环境变量方式
kubectl exec <pod-name> -- env | grep SERVICE# DNS方式(集群内访问)
<service-name>.<namespace>.svc.cluster.local
六、存储管理
6.1 卷类型
# pod-with-volume.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-with-volume
spec:containers:- name: nginximage: nginxvolumeMounts:- name: html-volumemountPath: /usr/share/nginx/htmlvolumes:- name: html-volumehostPath:path: /data/htmltype: Directory
6.2 PersistentVolume(PV)示例
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: pv-volume
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: /mnt/data
6.3 PersistentVolumeClaim(PVC)示例
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-claim
spec:accessModes:- ReadWriteOnceresources:requests:storage: 3Gi
七、集群维护
7.1 节点管理
# 标记节点不可调度
kubectl cordon <node-name># 排空节点(迁移Pod)
kubectl drain <node-name> --ignore-daemonsets# 恢复节点
kubectl uncordon <node-name>
7.2 升级集群
# 升级kubeadm
sudo apt-get update && sudo apt-get install -y kubeadm=1.23.5-00# 检查升级计划
sudo kubeadm upgrade plan# 升级Master节点
sudo kubeadm upgrade apply v1.23.5# 升级kubelet和kubectl
sudo apt-get update && sudo apt-get install -y kubelet=1.23.5-00 kubectl=1.23.5-00
sudo systemctl restart kubelet
八、监控与日志
8.1 基础监控
# 查看Pod日志
kubectl logs <pod-name># 实时日志流
kubectl logs -f <pod-name> -c <container-name># 进入Pod调试
kubectl exec -it <pod-name> -- /bin/bash
8.2 部署监控栈(Prometheus+Grafana)
# 添加Helm仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts# 安装kube-prometheus-stack
helm install prometheus prometheus-community/kube-prometheus-stack
九、安全最佳实践
9.1 RBAC配置
# role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]
# rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects:
- kind: Username: janeapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io
9.2 网络策略
# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: default-deny
spec:podSelector: {}policyTypes:- Ingress- Egress
十、学习资源推荐
10.1 官方文档
- Kubernetes官方文档
- kubeadm安装指南
- Kubernetes API参考
10.2 交互式教程
- Kubernetes官方互动教程
- Katacoda Kubernetes课程
10.3 认证路径
- CKAD (Certified Kubernetes Application Developer)
- CKA (Certified Kubernetes Administrator)
- CKS (Certified Kubernetes Security Specialist)
总结 🎯
通过本文的系统学习,我们已经掌握了K8s集群的核心技能:
- 架构理解:Master/Worker节点协同原理 🧠
- 集群部署:kubeadm生产级部署方案 🏗️
- 应用管理:从Pod到Deployment的完整编排 📦
- 运维安全:监控日志与安全加固体系 🔍
云原生黄金法则:
- 声明式配置:所有资源YAML化 📜
- 自动化运维:CI/CD流水线整合 🔄
- 渐进式扩展:从小集群开始实践 🐣
记住:Kubernetes不是终点,而是云原生的起点! 现在就去部署你的第一个集群吧!🚀✨
PS:如果你在学习过程中遇到问题,别慌!欢迎在评论区留言,我会尽力帮你解决!😄