1. CentOS系统准备与基础环境配置
1.1 操作系统选择与安装
对于Kubernetes集群部署,CentOS 7.x系列仍然是当前企业环境中最稳定的选择。我推荐使用CentOS 7.9 Minimal版本作为基础系统,这个版本经过长期验证,与Kubernetes 1.23.x版本兼容性最佳。安装时需要注意几个关键点:
-
分区方案建议:
/boot分区:1GB(ext4)swap分区:内存≤8GB时设为内存2倍,>8GB时与内存等大/根分区:至少50GB(xfs格式)- 单独的数据盘(可选):用于/var/lib/docker目录
-
安装后必须执行的基础配置:
bash复制# 关闭SELinux(K8s组件需要)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
# 关闭防火墙(或配置放行规则)
systemctl stop firewalld
systemctl disable firewalld
# 设置时区并同步时间
timedatectl set-timezone Asia/Shanghai
yum install -y chrony
systemctl enable chronyd && systemctl start chronyd
重要提示:生产环境中建议保留防火墙但配置放行规则,测试环境可直接关闭以简化部署流程。
1.2 系统参数优化
Kubernetes对Linux内核参数有特定要求,需要调整以下参数:
bash复制cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
sysctl --system
# 关闭swap(Kubernetes 1.8+要求)
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
对于CentOS 7还需要加载br_netfilter模块:
bash复制modprobe br_netfilter
echo 'br_netfilter' > /etc/modules-load.d/br_netfilter.conf
1.3 依赖组件安装
安装基础工具包和容器运行时依赖:
bash复制yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 容器运行时环境部署
2.1 Docker安装与配置
虽然Kubernetes 1.23开始支持containerd作为默认运行时,但KubeSphere对Docker仍有较好支持。推荐安装Docker 20.10.x版本:
bash复制# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装指定版本
yum install -y docker-ce-20.10.17 docker-ce-cli-20.10.17 containerd.io
# 配置Docker
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com"
]
}
EOF
# 启动服务
systemctl enable docker && systemctl start docker
验证安装:
bash复制docker version | grep -i version
# 应显示Client和Server版本均为20.10.x
2.2 可选:Containerd配置
如需使用containerd作为运行时(Kubernetes 1.23推荐):
bash复制cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
systemctl restart containerd
3. Kubernetes 1.23.17集群部署
3.1 安装kubeadm/kubelet/kubectl
添加Kubernetes阿里云镜像源:
bash复制cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装指定版本组件:
bash复制yum install -y kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17 --disableexcludes=kubernetes
systemctl enable kubelet
3.2 初始化Master节点
准备初始化配置文件:
bash复制cat > kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
criSocket: /var/run/dockershim.sock
kubeletExtraArgs:
cgroup-driver: "systemd"
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.23.17
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
EOF
执行初始化:
bash复制kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
记录关键输出信息(用于节点加入):
bash复制mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.3 安装Pod网络插件(Flannel)
bash复制kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
验证网络插件:
bash复制kubectl get pods -n kube-system -l app=flannel
# 应显示所有节点的flannel pod均为Running状态
3.4 加入Worker节点
在其他节点执行master初始化日志中记录的join命令,格式类似:
bash复制kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
验证节点状态:
bash复制kubectl get nodes
# 所有节点应显示为Ready状态
4. KubeSphere部署与配置
4.1 前置条件检查
安装必要的工具:
bash复制yum install -y socat
检查集群是否符合KubeSphere要求:
bash复制curl -L https://github.com/kubesphere/ks-installer/releases/download/v3.3.2/kubesphere-installer.yaml -o kubesphere-installer.yaml
kubectl apply -f kubesphere-installer.yaml
4.2 最小化安装KubeSphere
创建安装配置文件:
bash复制cat > cluster-configuration.yaml <<EOF
apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
name: ks-installer
namespace: kubesphere-system
labels:
version: v3.3.2
spec:
persistence:
storageClass: ""
authentication:
jwtSecret: ""
zone: ""
local_registry: ""
etcd:
monitoring: false
endpointIps: "localhost"
port: 2379
tlsEnable: true
common:
redis:
enabled: false
openldap:
enabled: false
minioVolumeSize: 20Gi
monitoring:
endpoint: http://prometheus-operated.kubesphere-monitoring-system.svc:9090
es:
elasticsearchMasterVolumeSize: 4Gi
elasticsearchDataVolumeSize: 20Gi
logMaxAge: 7
elkPrefix: logstash
basicAuth:
enabled: false
externalElasticsearchUrl: ""
externalElasticsearchPort: ""
console:
enableMultiLogin: true
port: 30880
alerting:
enabled: false
auditing:
enabled: false
devops:
enabled: false
events:
enabled: false
logging:
enabled: false
metrics_server:
enabled: false
monitoring:
storageClass: ""
multicluster:
clusterRole: none
network:
networkpolicy:
enabled: false
ippool:
type: none
topology:
type: none
openpitrix:
store:
enabled: false
servicemesh:
enabled: false
EOF
执行安装:
bash复制kubectl apply -f cluster-configuration.yaml
4.3 安装进度监控
查看安装日志:
bash复制kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
检查各组件状态:
bash复制kubectl get pods --all-namespaces
# 等待所有pod状态变为Running
4.4 访问KubeSphere控制台
获取访问地址:
bash复制kubectl get svc -n kubesphere-system ks-console -o jsonpath='{.spec.ports[0].nodePort}'
# 默认端口为30880
通过浏览器访问:
code复制http://<任意节点IP>:30880
默认管理员账号:
- 用户名:admin
- 密码:P@88w0rd
5. 集群验证与问题排查
5.1 基础功能验证
检查核心组件状态:
bash复制kubectl get pods -n kube-system
# 应看到coredns、kube-proxy、kube-apiserver等组件正常运行
kubectl get cs
# 所有组件应显示为Healthy
测试部署应用:
bash复制kubectl create deployment nginx --image=nginx:alpine
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
# 访问显示的NodePort应能获取Nginx欢迎页面
5.2 常见问题解决方案
-
kubelet无法启动:
bash复制journalctl -xeu kubelet # 常见原因:cgroup驱动不一致,检查docker和kubelet的cgroup驱动配置 -
Pod网络不通:
bash复制kubectl get pods -n kube-system -l app=flannel # 检查flannel日志:kubectl logs <flannel-pod-name> -n kube-system -
KubeSphere安装卡住:
bash复制kubectl describe pods -n kubesphere-system # 常见原因:资源不足或镜像拉取失败 -
节点NotReady:
bash复制kubectl describe node <node-name> # 检查kubelet日志和网络连接
5.3 性能优化建议
-
内核参数调优:
bash复制echo 'vm.max_map_count=262144' >> /etc/sysctl.conf sysctl -p -
Kubelet资源配置:
bash复制cat > /etc/sysconfig/kubelet <<EOF KUBELET_EXTRA_ARGS=--kube-reserved=cpu=500m,memory=1Gi --system-reserved=cpu=500m,memory=1Gi EOF systemctl restart kubelet -
Docker存储驱动优化:
bash复制# 对于生产环境建议使用direct-lvm模式
6. 生产环境增强配置
6.1 持久化存储配置
安装NFS客户端(如需使用NFS存储):
bash复制yum install -y nfs-utils
创建StorageClass示例:
bash复制kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-storage
provisioner: example.com/nfs
parameters:
archiveOnDelete: "false"
EOF
6.2 监控与日志方案
启用KubeSphere监控组件(修改cluster-configuration.yaml后重新应用):
yaml复制spec:
monitoring:
storageClass: ""
prometheusReplicas: 2
prometheusMemoryRequest: 400Mi
prometheusVolumeSize: 20Gi
6.3 高可用配置
对于生产环境,建议:
- 使用至少3个master节点
- 配置负载均衡器(如HAProxy+Keepalived)
- 使用外部etcd集群
- 配置Ceph/Rook作为分布式存储
6.4 安全加固措施
- 启用RBAC(KubeSphere默认启用)
- 配置网络策略:
bash复制kubectl -n kubesphere-system patch cc ks-installer --type merge --patch '{"spec":{"network":{"networkpolicy":{"enabled":true}}}}' - 定期轮换证书:
bash复制
kubeadm certs renew all
7. 日常维护与升级
7.1 备份策略
-
备份etcd数据:
bash复制ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ snapshot save /opt/etcd-backup-$(date +%Y%m%d).db -
备份KubeSphere配置:
bash复制
kubectl get cc ks-installer -n kubesphere-system -o yaml > ks-config-backup.yaml
7.2 版本升级路径
-
Kubernetes升级步骤:
bash复制
yum install -y kubeadm-1.24.x --disableexcludes=kubernetes kubeadm upgrade plan kubeadm upgrade apply v1.24.x yum install -y kubelet-1.24.x kubectl-1.24.x --disableexcludes=kubernetes systemctl restart kubelet -
KubeSphere升级方法:
bash复制kubectl edit cc ks-installer -n kubesphere-system # 修改spec.version字段为新版本
7.3 资源清理与回收
-
清理终止的Pod:
bash复制
kubectl get pods --all-namespaces --field-selector status.phase==Failed -o json | kubectl delete -f - -
清理未使用的PV:
bash复制kubectl get pv | grep Released | awk '{print $1}' | xargs kubectl delete pv -
清理Docker存储:
bash复制
docker system prune -af --volumes
8. 扩展功能与进阶配置
8.1 DevOps功能启用
修改KubeSphere配置启用DevOps:
bash复制kubectl -n kubesphere-system patch cc ks-installer --type merge --patch '{"spec":{"devops":{"enabled":true}}}'
8.2 Service Mesh集成
安装Istio作为服务网格:
bash复制kubectl -n kubesphere-system patch cc ks-installer --type merge --patch '{"spec":{"servicemesh":{"enabled":true}}}'
8.3 日志系统配置
启用ELK日志收集:
bash复制kubectl -n kubesphere-system patch cc ks-installer --type merge --patch '{"spec":{"logging":{"enabled":true}}}'
8.4 多集群管理
设置主集群:
bash复制kubectl -n kubesphere-system patch cc ks-installer --type merge --patch '{"spec":{"multicluster":{"clusterRole":"host"}}}'
加入成员集群:
bash复制# 在成员集群上执行
kubectl -n kubesphere-system create secret generic kubesphere-member --from-file=kubeconfig=/etc/kubernetes/admin.conf
