1. 首页 > Linux教程 > 正文

Linux教程FG543-大规模K8s集群部署与核心组件配置

本文档风哥主要介绍Linux系统大规模Kubernetes集群部署与核心组件配置,包括Kubernetes基础概念、K8s集群架构、核心组件介绍、K8s集群安装、核心组件配置、网络配置以及实战案例等内容,风哥教程参考Kubernetes官方文档、Linux官方文档Containers and virtual machines等内容,适合系统管理员在生产环境中使用。

Part01-基础概念与理论知识

1.1 Kubernetes基础概念

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。Kubernetes提供了服务发现、负载均衡、自动扩缩容、存储编排等功能,学习交流加群风哥QQ113257174使容器应用可以在集群中高效运行。

Kubernetes的核心概念:

  • Pod:容器的最小部署单位,可以包含一个或多个容器
  • Service:定义了Pod的访问方式,提供负载均衡
  • Deployment:管理Pod的副本数,实现滚动更新
  • StatefulSet:管理有状态应用,保证Pod的唯一性和顺序性
  • ConfigMap:存储配置信息
  • Secret:存储敏感信息
  • PersistentVolume:持久化存储
  • Namespace:隔离不同的资源

1.2 K8s集群架构

Kubernetes集群由控制平面和计算节点组成:

# K8s集群架构
– 控制平面(Control Plane):负责集群管理和决策
– 计算节点(Worker Node):负责运行容器应用
– etcd:分布式键值存储,存储集群状态
– API Server:集群的API入口
– Scheduler:负责Pod的调度
– Controller Manager:管理集群控制器
– Kubelet:运行在每个节点上,管理容器
– Kube-proxy:网络代理,负责服务发现和负载均衡

# 集群类型
– 单节点集群:用于开发和测试
– 多节点集群:用于生产环境
– 高可用集群:多控制平面节点,提高可靠性

1.3 核心组件介绍

Kubernetes的核心组件:

  • etcd:分布式键值存储,存储集群状态和配置信息
  • API Server:集群的API入口,处理所有的API请求
  • Scheduler:负责Pod的调度,根据资源需求和约束条件选择节点
  • Controller Manager:管理集群控制器,如Deployment、StatefulSet等
  • Kubelet:运行在每个节点上,管理容器的生命周期
  • Kube-proxy:网络代理,负责服务发现和负载均衡
  • Container Runtime:容器运行时,如Docker、containerd等

Part02-生产环境规划与建议

2.1 集群架构设计

生产环境Kubernetes集群架构设计要点:

# 集群规模
– 控制平面节点:3-5个,确保高可用性
– 计算节点:根据应用需求确定,支持水平扩展
– 节点分布:跨可用区部署,提高可靠性

# 网络架构
– 服务网络:用于Pod间通信
– Pod网络:用于Pod内部通信
– 外部网络:用于服务暴露

# 存储架构
– 本地存储:适合无状态应用
– 共享存储:适合有状态应用,如NFS、Ceph
– 存储类:使用StorageClass动态分配存储

2.2 硬件要求

生产环境硬件要求:

# 服务器要求
– 控制平面节点:至少4核CPU,8GB内存,100GB存储
– 计算节点:至少2核CPU,4GB内存,50GB存储
– 存储:SSD存储,提高I/O性能
– 网络:万兆网卡,确保网络带宽

# 控制平面节点要求
– 更高的CPU和内存配置:处理集群管理任务
– 冗余电源和网络:提高可靠性
– 跨可用区部署:确保高可用性

# 计算节点要求
– 根据应用需求配置:不同应用对资源要求不同
– 可扩展性:支持水平扩展
– 监控:实时监控节点状态

2.3 网络设计

生产环境网络设计要点:

# 网络架构
– 管理网络:用于集群管理通信
– 业务网络:用于Pod间通信
– 外部网络:用于服务暴露

# 网络配置
– 静态IP:所有节点使用静态IP
– 网络隔离:使用VLAN隔离不同网络
– 网络冗余:多网卡绑定
– 网络监控:监控网络状态

# 网络插件
– Calico:基于BGP的网络插件,性能好,功能丰富
– Flannel:简单易用,适合初学者
– Cilium:基于eBPF的网络插件,性能优异
– Weave Net:简单易用,支持多集群网络

Part03-生产环境项目实施方案

3.1 K8s集群安装

3.1.1 使用kubeadm安装K8s

# 安装依赖
$ sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker仓库
$ sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker
$ sudo dnf install -y docker-ce docker-ce-cli containerd.io

# 启动Docker服务
$ sudo systemctl start docker
$ sudo systemctl enable docker

# 添加Kubernetes仓库
$ cat <

3.1.2 添加计算节点

# 在控制平面节点上获取加入命令
$ kubeadm token create –print-join-command
kubeadm join 192.168.1.101:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

# 在计算节点上执行加入命令
$ sudo kubeadm join 192.168.1.101:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

# 在控制平面节点上查看节点状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 15m v1.27.0
worker1 Ready 5m v1.27.0
worker2 Ready 3m v1.27.0

3.2 核心组件配置

3.2.1 配置etcd

# 查看etcd状态
$ kubectl get pods -n kube-system | grep etcd
etcd-master1 1/1 Running 0 10m

# 备份etcd数据
$ ETCDCTL_API=3 etcdctl –endpoints=https://192.168.1.101:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key snapshot save /tmp/etcd-backup.db

# 查看etcd集群状态
$ ETCDCTL_API=3 etcdctl –endpoints=https://192.168.1.101:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key cluster-health

3.2.2 配置API Server

# 查看API Server配置
$ kubectl get pods -n kube-system | grep kube-apiserver
kube-apiserver-master1 1/1 Running 0 10m

# 查看API Server日志
$ kubectl logs kube-apiserver-master1 -n kube-system

# 配置API Server参数
$ sudo vim /etc/kubernetes/manifests/kube-apiserver.yaml
# 添加或修改参数

3.2.3 配置Scheduler

# 查看Scheduler状态
$ kubectl get pods -n kube-system | grep kube-scheduler
kube-scheduler-master1 1/1 Running 0 10m

# 查看Scheduler日志
$ kubectl logs kube-scheduler-master1 -n kube-system

# 配置Scheduler参数
$ sudo vim /etc/kubernetes/manifests/kube-scheduler.yaml
# 添加或修改参数

3.2.4 配置Controller Manager

# 查看Controller Manager状态
$ kubectl get pods -n kube-system | grep kube-controller-manager
kube-controller-manager-master1 1/1 Running 0 10m

# 查看Controller Manager日志
$ kubectl logs kube-controller-manager-master1 -n kube-system

# 配置Controller Manager参数
$ sudo vim /etc/kubernetes/manifests/kube-controller-manager.yaml
# 添加或修改参数

3.3 网络配置

3.3.1 配置Calico网络

# 安装Calico网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# 查看Calico pods状态
$ kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7d75c484b5-8x8x8 1/1 Running 0 5m
calico-node-2q4x2 1/1 Running 0 5m
calico-node-5b678 1/1 Running 0 5m
calico-node-7c89d 1/1 Running 0 5m

# 查看网络状态
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master1 Ready control-plane 20m v1.27.0 192.168.1.101 CentOS Linux 9 Stream 5.14.0-362.8.1.el9_3.x86_64 docker://24.0.7
worker1 Ready 10m v1.27.0 192.168.1.102 CentOS Linux 9 Stream 5.14.0-362.8.1.el9_3.x86_64 docker://24.0.7
worker2 Ready 8m v1.27.0 192.168.1.103 CentOS Linux 9 Stream 5.14.0-362.8.1.el9_3.x86_64 docker://24.0.7

Part04-生产案例与实战讲解

4.1 高可用K8s集群案例

4.1.1 高可用K8s集群部署

# 案例:高可用K8s集群
# 环境:3个控制平面节点,3个计算节点
# 目标:部署高可用K8s集群

# 1. 配置负载均衡器
$ sudo dnf install -y haproxy
$ sudo vim /etc/haproxy/haproxy.cfg

frontend kubernetes
bind *:6443
mode tcp
option tcplog
default_backend kubernetes-master-nodes

backend kubernetes-master-nodes
mode tcp
option tcplog
option tcp-check
balance roundrobin
server master1 192.168.1.101:6443 check fall 3 rise 2
server master2 192.168.1.102:6443 check fall 3 rise 2
server master3 192.168.1.103:6443 check fall 3 rise 2

# 2. 初始化第一个控制平面节点
$ sudo kubeadm init –control-plane-endpoint “192.168.1.100:6443” –pod-network-cidr=10.244.0.0/16

# 3. 加入其他控制平面节点
$ kubeadm join 192.168.1.100:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef –control-plane

# 4. 加入计算节点
$ kubeadm join 192.168.1.100:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

# 5. 安装网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.更多视频教程www.fgedu.net.cnyaml

# 6. 查看集群状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 20m v1.27.0
master2 Ready control-plane 15m v1.27.0
master3 Ready control-plane 10m v1.27.0
worker1 Ready 8m v1.27.0
worker2 Ready 6m v1.27.0
worker3 Ready 4m v1.27.0

4.2 多节点K8s集群案例

4.2.1 多节点K8s集群部署

# 案例:多节点K8s集群
# 环境:1个控制平面节点,5个计算节点
# 目标:部署多节点K8s集群

# 1. 初始化控制平面节点
$ sud更多学习教程公众号风哥教程itpux_como kubeadm init –pod-network-cidr=10.244.0.0/16

# 2. 配置kubectl
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 3. 安装网络插件
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 4. 加入计算节点
$ kubeadm join 192.168.1.101:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

# 5. 查看集群状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 20m v1.27.0
worker1 Ready 15m v1.27.0
worker2 Ready 14m v1.27.0
worker3 Ready 13m v1.27.0
worker4 Ready 12m v1.27.0
worker5 Ready 学习交流加群风哥微信: itpux-com 11m v1.27.0

# 6. 部署应用
$ kubectl create deployment nginx –image=nginx –replicas=5
$ kubectl expose deployment nginx –port=80 –type=NodePort

# 7. 查看应用状态
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-2q4x2 1/1 Running 0 5m
nginx-6799fc88d8-5b678 1/1 Running 0 5m
nginx-6799fc88d8-7c89d 1/1 Running 0 5m
nginx-6799fc88d8-9d765 1/1 Running 0 5m
nginx-6799fc88d8-bc543 1/1 Running 0 5m

$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 25m
nginx NodePort 10.100.123.45 80:30080/TCP 5m

4.3 生产级K8s集群案例

4.3.1 生产级K8s集群部署

# 案例:生产级K8s集群
# 环境:3个控制平面节点,10个计算节点
# 目标:部署生产级K8s集群

# 1. 配置基础设施
– 配置负载均衡器:使用HAProxy或Nginx
– 配置存储:使用Ceph或NFS
– 配置网络:使用Calico网络插件

# 2. 初始化控制平面节点
$ sudo kubeadm init –control-plane-endpoint “loadbalancer:6443” –pod-network-cidr=10.244.0.0/16

# 3. 加入其他控制平面节点
$ kubeadm join loadbalancer:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef –control-plane

# 4. 加入计算节点
$ kubeadm join loadbalancer:6443 –token abcdef.0123456789abcdef –discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

# 5. 安装网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# 6. 安装存储插件
$ kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/ceph.yaml

# 7. 安装监控插件
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm install prometheus prometheus-community/kube-prometheus-stack

# 8. 安装日志插件
$ helm repo add elastic https://helm.elastic.co
$ helm install elasticsearch elastic/elasticsearch
$ helm install kibana elastic/kibana
$ helm install filebeat elastic/filebeat

# 9. 查看集群状态
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 30m v1.27.0
master2 Ready control-plane 25m v1.27.0
master3 Ready control-plane 20m v1.27.0
worker1 Ready 18m v1.27.0
worker2 Ready 17m v1.27.0
worker3 Ready 16m v1.27.0
worker4 Ready 15m v1.27.0
worker5 Ready 14m v1.27.0
worker6 Ready 13m v1.27.0
worker7 Ready 12m v1.27.0
worker8 Ready 11m v1.27.0
worker9 Ready 10m v1.27.0
worker10 Ready 9m v1.27.0

Part05-风哥经验总结与分享

5.1 K8s集群最佳实践

from PG视频:www.itpux.com

Kubernetes集群最佳实践:

  • 使用高可用控制平面:部署3-5个控制平面节点,确保集群可靠性
  • 合理规划网络:选择适合的网络插件,确保网络性能和可靠性
  • 使用存储类:为不同应用配置合适的存储类
  • 配置资源限制:为Pod设置CPU和内存限制,避免资源争用
  • 使用健康检查:配置Pod的存活和就绪探针,确保服务可用性
  • 监控与告警:部署监控系统,及时发现和解决问题
  • 定期备份:备份etcd数据和集群配置
  • 安全配置:启用RBAC、网络策略等安全特性

5.2 常见问题与解决方案

# 常见问题与解决方案

## 1. 节点不可用
– 原因:网络问题、资源不足、kubelet故障
– 解决方案:检查网络连接、增加节点资源、重启kubelet服务

## 2. Pod调度失败
– 原因:资源不足、节点亲和性约束、污点和容忍度
– 解决方案:增加节点资源、调整调度策略、修改亲和性约束

## 3. 网络问题
– 原因:网络插件配置错误、防火墙阻止、网络策略限制
– 解决方案:检查网络插件配置、关闭防火墙或开放端口、调整网络策略

## 4. 存储问题
– 原因:存储类配置错误、存储空间不足、存储插件故障
– 解决方案:检查存储类配置、增加存储空间、重启存储插件

## 5. 性能问题
– 原因:资源限制不当、Pod数量过多、网络带宽不足
– 解决方案:调整资源限制、优化Pod数量、增加网络带宽

5.3 性能调优建议

风哥针对

Kubernetes集群性能调优建议:

  • 优化控制平面:增加控制平面节点的CPU和内存资源,调整API Server参数
  • 优化计算节点:根据应用需求配置节点资源,使用合适的容器运行时
  • 优化网络:使用高性能网络插件,配置适当的MTU,使用万兆网络
  • 优化存储:使用SSD存储,配置适当的存储类,使用本地存储缓存
  • 优化调度:调整调度策略,使用节点亲和性和反亲和性
  • 优化Pod配置:设置合理的资源限制和请求,使用健康检查
  • 监控与分析:使用Prometheus和Grafana监控集群性能,分析瓶颈
  • 定期维护:清理无用的Pod和资源,更新Kubernetes版本

风哥提示:

Kubernetes是企业级容器编排的重要平台,合理的配置和优化可以提高系统的可用性和性能。建议从集群架构设计开始,逐步优化K8s配置。

持续监控:Kubernetes集群需要持续监控和维护,建议建立完善的监控体系,及时发现和解决问题,确保集群的稳定运行。

风哥提示:

安全是Kubernetes集群的重要考虑因素,一定要采取严格的安全措施,防止未授权访问和攻击。from Linux:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息