Kubernetes (K8s) 入门到实战教程

一、K8s 简介

  1. 什么是 Kubernetes

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩缩容和管理容器化应用。

  1. 核心功能
  • 服务发现与负载均衡
  • 存储编排
  • 自动部署与回滚
  • 自动扩缩容
  • 自愈(重启失败容器)
  • 密钥与配置管理
  1. 核心组件
  • Master 节点:控制平面(API Server、Scheduler、Controller Manager、etcd)
  • Node 节点:工作节点(kubelet、kube-proxy、容器运行时)

二、环境准备

  1. 安装 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

  1. 安装 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

  1. 关闭 Swap

bash

sudo swapoff -a

sudo sed -i '/swap/s/^/#/' /etc/fstab

三、初始化 Master 节点

  1. 初始化

bash

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

  1. 配置 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

  1. 安装网络插件(Flannel)

bash

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  1. 查看节点状态

bash

kubectl get nodes

四、加入 Node 节点

  1. 在 Master 节点获取加入命令

bash

kubeadm token create --print-join-command

  1. 在 Node 节点执行

bash

sudo kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:

五、核心资源操作

  1. Pod

bash

创建 Pod

kubectl run nginx --image=nginx

查看 Pod

kubectl get pods

查看 Pod 详情

kubectl describe pod nginx

删除 Pod

kubectl delete pod nginx

  1. 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

  1. Service

bash

创建 Service(NodePort)

kubectl expose deployment nginx --type=NodePort --port=80

查看 Service

kubectl get services

访问

curl :

  1. 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

六、常用命令

  1. 资源查看

bash

kubectl get all

kubectl get pods -o wide

kubectl get nodes -o wide

  1. 日志查看

bash

kubectl logs

kubectl logs -f

  1. 进入容器

bash

kubectl exec -it -- /bin/bash

  1. 资源删除

bash

kubectl delete deployment nginx

kubectl delete service nginx

kubectl delete pod

七、实战示例:部署 Nginx

  1. 创建 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

  1. 创建 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

  1. 访问

bash

curl :30080

八、总结

本教程涵盖了 K8s 从环境搭建到核心资源操作的完整流程,适合初学者快速入门。

学习建议:

  1. 多练习命令,熟悉资源操作
  2. 理解 Pod、Deployment、Service 关系
  3. 学习 Helm、Ingress 等高级功能
相关推荐
奋斗的老史1 小时前
Stream-流式操作
java·windows
清风徐来QCQ2 小时前
八股文(1)
java·开发语言
zdl6862 小时前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端
摇滚侠2 小时前
你是一名 java 程序员,总结定义数组的方式
java·开发语言·python
架构师沉默2 小时前
AI 让程序员更轻松了吗?
java·后端·架构
MrSYJ3 小时前
有没有人懂socketChannel中的write,read方法啊,给我讲讲
java·程序员·netty
Memory_荒年3 小时前
Spring Security + OAuth2 + JWT:三剑客合璧,打造“无懈可击”的微服务安全防线
java·后端·spring
杰克尼4 小时前
知识点总结--02(java基础部分)
java·开发语言·jvm
mldlds4 小时前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot