K8S实训

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. 环境验证清单

  1. 核心服务状态:systemctl status kubelet docker
  2. 网络连通性:ping <控制平面IP> && telnet 6443
  3. DNS解析测试:nslookup kubernetes.default.svc.cluster.local
  4. 工作负载测试: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
    EOF

    cat > /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和磁盘

3. 第三章K8s工作负载

4. 第四章存储管理

5. 第五章密码管理

6. 第六章deployment

7. 第七章服务配置3

发表评论

邮箱地址不会被公开。 必填项已用*标注