1. 第一章K8S安装
1.1. 基础概念表

| 名词 | 解释 |
|---|---|
| Master | 是Kubernetes集群的大脑,负责Kubernetes的核心管理和调度。决定应用放在哪里运行,怎样运行。 |
| Node | 是实际运行服务的地方,也就是pod运行的地方。它的职责是运行容器应用。Node由Master管理,Node负责监控并汇报容器的状态,管理容器的生命周期。 |
| Pod | 是Kubernetes的最小工作单元。每个Pod包含1个或多个容器,Pod中的容器会作为一个整体被Master调度到一个Node上运行。 |
| Controller | 维护资源对象,创建和运行容器 (Pod) 。Deployment Controller是最常用的控制器。 |
| Service | 定义了外界访问的一组特定Pod的方式,有自己的IP和端口,为Pod提供了负载均衡 |
| Namespace | 解决多个用户或者多个项目组使用同一个K8S集群的权限问题,不同namespace里的资源是完全隔离的。 |
1.2. 核心组件架构

| 组件 | 核心功能 | 运维关注点 |
|---|---|---|
| kube-apiserver | 集群统一入口,REST API接口服务 | 高可用部署、访问鉴权 |
| kube-scheduler | 资源调度决策,分配Pod到Node | 调度策略配置 |
| kube-controller | 维护资源状态(节点状态、Pod副本数等) | 控制器健康状态 |
| etcd | 分布式键值存储,保存集群状态 | 数据备份、性能监控 |
| kubelet | 节点代理,管理Pod生命周期 | 资源利用率、容器运行时状态 |
| kube-proxy | 维护节点网络规则,实现Service通信 | 网络插件兼容性 |
1.3. 增强版kubectl命令集
# 集群诊断
kubectl get componentstatuses # 检查核心组件健康状态(缩写:kubectl get cs)
# 资源操作
kubectl get pods -o wide # 查看Pod分布节点信息
kubectl describe node <node> # 查看节点详细资源分配
kubectl top pod # 实时资源监控(需metrics-server)
# 日志排查
kubectl logs -f <pod> # 实时日志追踪
kubectl exec -it <pod> -- sh # 进入容器调试
# 配置管理
kubectl apply -f manifest.yaml # 声明式配置变更
kubectl rollout status deployment/<name> # 查看滚动更新状态
#查询显示
kubectl cluster-info # 显示集群核心组件地址(API Server、DNS、Dashboard)
kubectl version --short # 快速查看客户端和服务端版本(关键兼容性检查)
kubectl api-versions # 列出可用API版本(编写YAML时版本选择依据)
kubectl config view --minify # 显示当前上下文配置(集群/用户/命名空间信息)
#删除节点
kubectl drain vms12.rhce.cc --delete-local-data --force --ignore-daemonsets
kubectl delete node vms12.rhce.cc
1.3.1. 生产级kubeadm部署优化
# 系统预配置(所有节点)
swapoff -a && sed -ri '/swap/s/^/#/' /etc/fstab # 永久禁用swap
modprobe br_netfilter && sysctl -p /etc/sysctl.d/k8s.conf # 加载网络模块
# 高可用集群初始化(master节点)
kubeadm init \
--control-plane-endpoint "CLUSTER_IP:6443" \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.1 \
--service-cidr 10.96.0.0/12 \
--pod-network-cidr 10.244.0.0/16
# CNI网络插件选型建议
# Flannel - 简单场景:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# Calico - 网络策略需求:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
1.3.2. 环境验证清单
- 核心服务状态:systemctl status kubelet docker
- 网络连通性:ping <控制平面IP> && telnet 6443
- DNS解析测试:nslookup kubernetes.default.svc.cluster.local
- 工作负载测试:kubectl run test --image=nginx:alpine && kubectl get pod -w
1.4. kubeadm的安装方式
1.4.1. 在master和node上执行
-
配置系统
关闭防火墙,selinux,配置/etc/hosts,关闭swap, 配置yum swapoff-a ; sed -i'/swap/d' /etc/fstab -
安装docker
yum install docker-ce-y
启动docker并设置开机自动启动,导入镜像 -
设置相关属性
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFcat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://frz7i079.mirror.aliyuncs.com"]
}
EOF
安装kubernetes相关软件包
yum install -y kubelet-1.15.3-0 kubeadm-1.15.3-0 kubectl-1.15.3-0 --disableexcludes=kubernetes
yum install -y kubelet-1.20.1-0 kubeadm-1.20.1-0 kubectl-1.20.1-0 --disableexcludes=kubernetes
注意,需要指定版本,否则安装是最新版的
yum list --showduplicates kubeadm --disableexcludes=kubernetes
启动服务
systemctl restart kubelet ; systemctl enable kubelet
1.4.2. 在maser上执行
kubeadm init --kubernetes-version=v1.20.1--pod-network-cidr=10.244.0.0/16
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.20.1 --pod-network-cidr=10.244.0.0/16
kubeadm init --config kubeadm-config.yaml (从kubeadm config view获取)
- 安装flannel网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
sed -i 's/192.168.0.0/10.244.0.0/g' calico_v3.14.yaml
配置KUBECONFIG变量
#echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml
1.4.3. 把node加入到集群
kubeadm join IP:6443 --token TOKEN 这个命令上面有提示
如果后期忘记了,可以通过kubeadm token create --print-join-command 查看
重新部署环境kubeadm reset
设置可以用tab补齐键vim /etc/profile
source <(kubectl completion bash)
source /etc/profile
前提:bash-completion.noarch 必须要安装才行
vim的设置
set paste
kubectl edit cm -n kube-system
删除daemonset pod
2. 第二章 POD
POD 是k8s中的最小调度单位不是一个程序/进程,而是一个环境(包括容器、存储、网络ip:port、容器配置),可以理解为加壳的容器。其中可以运行1个或多个容器(docker或其他容器)
一个pod内部的容器共享所有资源,包括共享pod的ip:port和磁盘