云上攻防(一)-K8S集群搭建
字数 1078 2025-08-23 18:31:17
Kubernetes (K8S) 集群搭建与配置指南
一、环境准备
1.1 系统要求
- 操作系统:CentOS 7.0
- 镜像下载地址:阿里云开源镜像站
- 节点规划:
- Master节点:192.168.108.100
- Node01节点:192.168.108.101
- Node02节点:192.168.108.102
1.2 基础配置
1.2.1 主机名解析配置
编辑/etc/hosts文件,添加以下内容:
192.168.108.100 master
192.168.108.101 node01
192.168.108.102 node02
操作步骤:
su root # 切换到root权限
vi /etc/hosts # 编辑文件
# 按i进入插入模式,添加内容后按Esc,输入:wq保存退出
1.2.2 时间同步
systemctl start chronyd
systemctl enable chronyd
date # 验证时间
二、系统优化配置
2.1 禁用防火墙和iptables
systemctl stop firewalld
systemctl disable firewalld
2.2 禁用SELinux
# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 临时关闭
setenforce 0
2.3 禁用Swap分区
# 临时关闭
swapoff -a
# 永久关闭
vim /etc/fstab # 注释掉swap相关行
2.4 修改内核参数
编辑/etc/sysctl.d/kubernetes.conf,添加:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
应用配置:
sysctl -p
modprobe br_netfilter
lsmod | grep br_netfilter # 验证是否加载成功
2.5 配置IPVS功能
yum install ipset ipvsadmin -y
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
/bin/bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4 # 验证
完成以上配置后重启服务器:
reboot
三、Docker安装与配置
3.1 安装Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
3.2 配置Docker
mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
3.3 启动Docker
systemctl enable docker && systemctl start docker
四、Kubernetes组件安装
4.1 配置Kubernetes源
vim /etc/yum.repos.d/kubernetes.repo
添加以下内容:
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
4.2 安装Kubernetes组件
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
4.3 配置kubelet
vim /etc/sysconfig/kubelet
添加:
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
五、集群初始化
5.1 Master节点初始化
kubeadm init \
--apiserver-advertise-address=192.168.108.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
5.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
5.3 Node节点加入集群
在Node节点上执行Master初始化后输出的join命令,例如:
kubeadm join 192.168.108.100:6443 --token xxxxxx.xxxxxxxxxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
如果遇到问题,可以先执行:
kubeadm reset
六、网络插件配置
6.1 下载Flannel
下载地址:Flannel releases
6.2 加载Flannel镜像
docker load < flanneld-v0.13.0-amd64.docker
6.3 部署Flannel服务
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
6.4 验证节点状态
kubectl get nodes
# 等待几分钟让状态变为Ready
七、集群功能验证
7.1 创建Deployment
kubectl create deployment nginx --image=nginx:1.14-alpine
kubectl get deploy # 查看部署状态
7.2 创建Service
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
kubectl get svc # 查看服务状态
7.3 访问测试
通过Node节点的IP加上Service暴露的NodePort访问Nginx服务。
八、常用命令
8.1 基础命令
kubectl get pod # 查看所有pod
kubectl get node # 查看所有node
kubectl get pod <pod-name> # 查看特定pod
8.2 详细信息查看
kubectl get pod <pod-name> -o json # JSON格式输出
kubectl get pod <pod-name> -o yaml # YAML格式输出
kubectl get pod <pod-name> -o wide # 详细信息
kubectl describe pod <pod-name> # 描述资源信息
8.3 进入Pod
kubectl exec -it <pod-name> -- /bin/sh
九、常见问题解决
9.1 节点无法加入集群
- 检查token是否过期
- 确保所有节点时间同步
- 检查网络连通性
9.2 Pod状态异常
- 检查网络插件是否正常运行
- 查看Pod描述信息获取错误详情
kubectl describe pod <pod-name>
9.3 服务无法访问
- 检查Service是否正确暴露端口
- 确认Pod运行在哪个节点上
kubectl get pod <pod-name> -o json # 查看hostIP
十、维护与重置
10.1 重置集群
kubeadm reset
10.2 删除资源
kubectl delete deployment <deployment-name>
kubectl delete svc <service-name>
通过以上步骤,您可以成功搭建一个功能完整的Kubernetes集群,并进行基本的应用部署和管理。在实际使用过程中,可能会遇到各种问题,建议参考Kubernetes官方文档和社区资源进行深入学习和故障排查。