2026/6/28 11:20:28
网站建设
项目流程
手机微信网站,公众号关注推广,wap微信网站模板,怎样才能有自己的网站在云原生时代#xff0c;Kubernetes#xff08;简称K8S#xff09;已成为容器编排的事实标准#xff0c;无论是企业级应用部署还是个人技术学习#xff0c;掌握K8S的安装与基础操作都是必备技能。本文将从安装前置准备、具体安装步骤#xff08;以主流的kubeadm方式为例Kubernetes简称K8S已成为容器编排的事实标准无论是企业级应用部署还是个人技术学习掌握K8S的安装与基础操作都是必备技能。本文将从安装前置准备、具体安装步骤以主流的kubeadm方式为例再到日常运维核心命令一步步带大家上手K8S全程兼顾实用性与易懂性新手也能轻松跟随操作。一、安装前置准备在开始安装K8S之前需要先完成环境配置避免后续出现兼容性问题。以下是单节点master节点可兼作worker和多节点集群的通用前置要求本次以CentOS 7/8系统为例Ubuntu系统操作逻辑类似仅包管理命令不同。1. 硬件要求master2C4G192.168.10.20docker、kubeadm、kubelet、kubectl、flannelnode12C2G192.168.10.21docker、kubeadm、kubelet、kubectl、flannelnode22C2G192.168.10.22docker、kubeadm、kubelet、kubectl、flannel2. 系统环境配置登录服务器后先执行以下命令完成系统初始化配置关闭防火墙生产环境可按需配置安全规则新手建议先关闭简化操作# 关闭firewalld systemctl stop firewalld systemctl disable firewalld # 关闭selinux避免权限限制 setenforce 0 # 临时关闭 sed -i s/^SELINUXenforcing$/SELINUXdisabled/ /etc/selinux/config 重启生效关闭Swap分区K8S要求禁用Swap否则会影响容器调度和性能# 临时关闭 swapoff -a # 永久关闭注释swap挂载项 sed -ri s/.*swap.*/#/ /etc/fstab配置主机名与hosts解析各节点需能通过主机名互通vim /etc/hosts hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2配置内核参数开启IP转发支持K8S网络插件cat /etc/sysctl.d/kubernetes.conf EOF net.bridge.bridge-nf-call-ip6tables1 net.bridge.bridge-nf-call-iptables1 net.ipv6.conf.all.disable_ipv61 net.ipv4.ip_forward1 EOF # 生效参数 sysctl --system安装DockerK8S需依赖容器运行时这里选择主流的Docker或containerd本次以Docker为例以下所有节点操作 # 所有节点安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io #配置docker加速器 mkdir /etc/docker cat /etc/docker/daemon.json EOF { registry-mirrors: [https://6ijb8ubo.mirror.aliyuncs.com], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m } } EOF # 重启docker systemctl daemon-reload systemctl restart docker.service systemctl enable docker.service docker info | grep Cgroup Driver Cgroup Driver: systemd二、K8S安装步骤kubeadm方式kubeadm是K8S官方提供的集群部署工具简化了安装流程适合新手快速搭建集群。本次先介绍单节点集群master节点安装后续补充多节点集群的worker节点加入方法。1. 安装kubeadm、kubelet、kubectl这三个是K8S的核心组件kubeadm用于初始化集群kubelet是节点上的代理组件管理容器kubectl是K8S的命令行工具。所有节点安装kubeadmkubelet和kubectl #定义源 cat /etc/yum.repos.d/kubernetes.repo EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck0 repo_gpgcheck0 gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet-1.20.11 kubeadm-1.20.11 kubectl-1.20.11 # 设置为开机自启 systemctl enable kubelet.service2. 初始化master节点执行kubeadm init命令初始化集群核心是拉取K8S核心镜像apiserver、controller-manager等并配置集群参数。//在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录 unzip v1.20.11.zip -d /opt/k8s cd /opt/k8s/v1.20.11 for i in $(ls *.tar); do docker load -i $i; done //复制镜像和脚本到 node 节点并在 node 节点上执行脚本加载镜像文件 scp -r /opt/k8s rootnode1:/opt scp -r /opt/k8s rootnode2:/opt //初始化kubeadm kubeadm init \ --apiserver-advertise-address192.168.10.19 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-versionv1.20.11 \ --service-cidr10.96.0.0/16 \ --pod-network-cidr10.244.0.0/16 \ --token-ttl0 此方式初始化后需要修改 kube-proxy 的 configmap开启 ipvs kubectl edit cm kube-proxy -nkube-system 修改mode: ipvs初始化成功后会输出以下关键信息务必保存用于后续配置kubectl和添加worker节点Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run kubectl apply -f [podnetwork].yaml with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: #以下为进入集群的指令 kubeadm join 192.168.10.20:6443 --token pdh67c.t59nph91cdssqmvv --discovery-token-ca-cert-hash sha256:a9c5fa1575e0869f7d6b4b226caa8cf94f4203120daca37bfceb530687a13d8e3. 安装网络插件关键步骤K8S集群初始化后需要安装网络插件才能让Pod之间互通。这里选择主流的Flannel插件轻量、易部署//安装flannel插件 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml //在 node 节点上执行 kubeadm join 命令加入群集 kubeadm join 192.168.10.20:6443 --token pdh67c.t59nph91cdssqmvv --discovery-token-ca-cert-hash sha256:a9c5fa1575e0869f7d6b4b226caa8cf94f4203120daca37bfceb530687a13d8e若出现“ImagePullBackOff”错误说明拉取Flannel镜像失败可手动拉取镜像并重新标签# 手动拉取阿里云Flannel镜像 docker pull registry.aliyuncs.com/google_containers/flannel:v0.21.5 # 给镜像打标签符合配置文件中的镜像名称要求 docker tag registry.aliyuncs.com/google_containers/flannel:v0.21.5 quay.io/flannel/flannel:v0.21.5 # 重新应用配置文件 kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.21.5/Documentation/kube-flannel.yml4. 单节点集群允许master节点调度Pod可选默认情况下master节点会被打上“污点”不允许调度Pod生产环境为了安全建议单独部署worker节点。单节点集群需移除污点让master节点能运行Pod# 移除master节点污点 kubectl taint nodes --all node-role.kubernetes.io/control-plane- kubectl taint nodes --all node-role.kubernetes.io/master- # 旧版本K8S使用此命令 # 验证节点状态STATUS为Ready即正常 kubectl get nodes5. 添加worker节点多节点集群如果需要搭建多节点集群在worker节点上完成“一、安装前置准备”和“二、1. 安装kubeadm、kubelet、kubectl”后执行master节点初始化成功时输出的join命令若join命令的token过期可在master节点执行以下命令重新生成# 生成新的join token kubeadm token create --print-join-command在master节点执行以下命令验证worker节点是否加入成功# 若worker节点STATUS为Ready说明加入成功 kubectl get nodes三、K8S核心操作命令汇总安装完成后通过kubectl命令管理集群。以下是日常运维中最常用的命令按“集群状态查看”“Pod管理”“服务管理”“命名空间管理”分类整理方便查询。1. 集群状态查看# 查看节点状态 kubectl get nodes kubectl get nodes -o wide # 查看节点详细信息IP、容器运行时等 # 查看集群组件状态控制平面组件 kubectl get componentstatuses kubectl get cs # 简写 # 查看命名空间所有资源都属于某个命名空间默认有default、kube-system等 kubectl get namespaces kubectl get ns # 简写 # 查看指定命名空间下的所有资源 kubectl get all -n kube-system kubectl get all # 查看默认命名空间default下的所有资源2. Pod管理Pod是K8S的最小部署单元# 查看Pod状态 kubectl get pods kubectl get pods -n kube-system # 查看指定命名空间的Pod kubectl get pods -o wide # 查看Pod详细信息运行节点、IP等 # 查看Pod日志调试常用 kubectl logs pod-name # 查看指定Pod的日志 kubectl logs -f pod-name # 实时跟踪Pod日志 kubectl logs pod-name -c container-name # 若Pod有多个容器指定容器查看日志 # 进入Pod内部类似docker exec kubectl exec -it pod-name -- /bin/bash # 进入Pod的默认容器 kubectl exec -it pod-name -c container-name -- /bin/bash # 指定容器 # 创建Pod通过yaml文件推荐 kubectl apply -f pod-yaml-file.yaml # 示例创建一个nginx Pod的yaml文件nginx-pod.yaml cat nginx-pod.yaml EOF apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: nginx spec: containers: - name: nginx image: nginx:1.21 ports: - containerPort: 80 EOF # 执行创建命令 kubectl apply -f nginx-pod.yaml # 删除Pod kubectl delete pod pod-name kubectl delete -f pod-yaml-file.yaml # 通过yaml文件删除3. 服务管理Service用于暴露Pod实现负载均衡和服务发现# 查看Service kubectl get services kubectl get svc # 简写 # 创建Service以暴露nginx Pod为例创建ClusterIP类型的Service # 编写service yaml文件nginx-svc.yaml cat nginx-svc.yaml EOF apiVersion: v1 kind: Service metadata: name: nginx-svc spec: selector: app: nginx # 匹配label为app:nginx的Pod ports: - port: 80 # Service暴露的端口 targetPort: 80 # Pod的容器端口 type: ClusterIP # 类型ClusterIP仅集群内部访问、NodePort节点端口暴露、LoadBalancer云厂商负载均衡 EOF # 执行创建命令 kubectl apply -f nginx-svc.yaml # 暴露Pod为Service快速创建无需编写yaml kubectl expose pod pod-name --port80 --target-port80 --namesvc-name # 删除Service kubectl delete svc svc-name kubectl delete -f svc-yaml-file.yaml4. 命名空间管理# 创建命名空间 kubectl create namespace ns-name kubectl create ns ns-name # 简写 # 在指定命名空间创建资源示例在test-ns命名空间创建nginx Pod kubectl apply -f nginx-pod.yaml -n test-ns # 删除命名空间会删除命名空间下的所有资源谨慎操作 kubectl delete ns ns-name5. 其他常用命令# 查看资源详情Pod、Service等都可使用 kubectl describe pod pod-name kubectl describe svc svc-name # 重启PodK8S没有直接重启命令可通过删除Pod实现重启前提是Pod由Deployment管理 kubectl delete pod pod-name # 查看K8S集群信息 kubectl cluster-info # 导出资源yaml文件方便备份或修改 kubectl get pod pod-name -o yaml pod-name-backup.yaml四、常见问题排查kubectl get nodes 显示节点NotReady大概率是网络插件未部署成功或镜像拉取失败执行kubectl get pods -n kube-system查看flannel或其他网络插件的Pod状态若为ErrImagePull/ImagePullBackOff手动拉取镜像并打标签。初始化master节点时提示“container runtime is not running”Docker或containerd未启动执行systemctl start docker启动容器运行时。Pod启动后处于Pending状态可能是节点资源不足CPU/内存或没有符合条件的节点如master节点未移除污点执行kubectl describe pod pod-name查看Events字段根据提示排查。五、总结本文通过“前置准备→安装步骤→核心命令”的流程带大家完成了K8S集群的搭建和基础操作。重点掌握kubeadm初始化集群、Flannel网络插件安装以及kubectl的核心命令查看状态、管理Pod和Service就能应对日常的基础运维需求。后续可以进一步学习DeploymentPod的编排管理、StatefulSet有状态应用部署等高级特性深入掌握K8S的强大功能。如果在安装过程中遇到问题欢迎在评论区留言交流