一、K8s 简介
- 什么是 Kubernetes
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩缩容和管理容器化应用。
- 核心功能
- 服务发现与负载均衡
- 存储编排
- 自动部署与回滚
- 自动扩缩容
- 自愈(重启失败容器)
- 密钥与配置管理
- 核心组件
- Master 节点:控制平面(API Server、Scheduler、Controller Manager、etcd)
- Node 节点:工作节点(kubelet、kube-proxy、容器运行时)
二、环境准备
- 安装 Docker
bash
Ubuntu/Debian
sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
CentOS/RHEL
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
- 安装 kubeadm、kubelet、kubectl
bash
添加 Kubernetes 源
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
安装
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
- 关闭 Swap
bash
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
三、初始化 Master 节点
- 初始化
bash
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 配置 kubectl
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown (id−u):(id -u):(id−u):(id -g) $HOME/.kube/config
- 安装网络插件(Flannel)
bash
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 查看节点状态
bash
kubectl get nodes
四、加入 Node 节点
- 在 Master 节点获取加入命令
bash
kubeadm token create --print-join-command
- 在 Node 节点执行
bash
sudo kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
五、核心资源操作
- Pod
bash
创建 Pod
kubectl run nginx --image=nginx
查看 Pod
kubectl get pods
查看 Pod 详情
kubectl describe pod nginx
删除 Pod
kubectl delete pod nginx
- Deployment
bash
创建 Deployment
kubectl create deployment nginx --image=nginx --replicas=3
查看 Deployment
kubectl get deployments
扩缩容
kubectl scale deployment nginx --replicas=5
更新镜像
kubectl set image deployment/nginx nginx=nginx:1.21
回滚
kubectl rollout undo deployment/nginx
- Service
bash
创建 Service(NodePort)
kubectl expose deployment nginx --type=NodePort --port=80
查看 Service
kubectl get services
访问
curl :
- ConfigMap & Secret
bash
创建 ConfigMap
kubectl create configmap nginx-config --from-literal=server_name=nginx
创建 Secret
kubectl create secret generic nginx-secret --from-literal=password=123456
六、常用命令
- 资源查看
bash
kubectl get all
kubectl get pods -o wide
kubectl get nodes -o wide
- 日志查看
bash
kubectl logs
kubectl logs -f
- 进入容器
bash
kubectl exec -it -- /bin/bash
- 资源删除
bash
kubectl delete deployment nginx
kubectl delete service nginx
kubectl delete pod
七、实战示例:部署 Nginx
- 创建 Deployment
yaml
nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
bash
kubectl apply -f nginx-deployment.yaml
- 创建 Service
yaml
nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
bash
kubectl apply -f nginx-service.yaml
- 访问
bash
curl :30080
八、总结
本教程涵盖了 K8s 从环境搭建到核心资源操作的完整流程,适合初学者快速入门。
学习建议:
- 多练习命令,熟悉资源操作
- 理解 Pod、Deployment、Service 关系
- 学习 Helm、Ingress 等高级功能