Centos7.9使用kubeadm部署K8S单机环境

Centos7.9使用kubeadm部署K8S单机环境

使用kubeadm部署一个k8s单机环境

1. 环境信息

  • 操作系统:CentOS 7.9.2009
  • 内存: 4GB
  • CPU: 2
  • 网络: 能够互访,能够访问互联网
hostname ip 备注
k8s 192.168.0.159 master + worker

2. 准备工作

在所有节点(包括 Master 和 Worker 节点)上执行以下步骤。

2.1 linux基础配置

# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

# 关闭 swap
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 关闭 selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 设置时区
timedatectl set-timezone Asia/Shanghai

# 时间同步
yum -y install ntpdate
ntpdate time.windows.com
hwclock --systohc

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

2.2 安装 Docker

# 添加镜像源
curl https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
# 查看docker-ce的版本列表
yum list docker-ce --showduplicates | sort -r
# 安装20.10
yum -y install docker-ce-20.10.6-3.el7
systemctl start docker
systemctl enable docker

# 换成阿里Docker仓库
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://wnsrsn9i.mirror.aliyuncs.com"]
}
EOF

# 重启配置生效
systemctl restart docker
docker info
...
 Registry Mirrors:
  https://wnsrsn9i.mirror.aliyuncs.com/
...

2.3 安装 kubeadm、kubelet 和 kubectl

# 添加镜像源
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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 查看支持的版本
yum list kubelet --showduplicates | sort -r

# 安装
yum install -y kubelet-1.22.0 kubeadm-1.22.0 kubectl-1.22.0

# 配置kubelet服务自启动
systemctl enable kubelet

3. 单机部署

# 设置hostname
hostnamectl set-hostname k8s
cat >> /etc/hosts << EOF
192.168.0.159 k8s
EOF

# 初始化 Master
kubeadm init \
--apiserver-advertise-address=192.168.0.159 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

...
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
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):
<think>嗯,用户想在CentOS 7.9上通过一个实例来理解Docker、K8s和Nginx的区别与联动,并且需要一个前后端分离的开源项目来实践。首先,我需要确定用户的需求是什么。用户可能刚开始接触容器化和编排工具,想通过实际项目来学习这些技术之间的不同和协作方式。 首先,用户可能对Docker、Kubernetesk8s)和Nginx的基本概念不太清楚,需要先区分它们的作用。Docker用于容器化应用,K8s容器编排,Nginx作为反向代理或Web服务器。用户需要一个具体的项目来演示这些技术如何协同工作。 接下来,选择一个合适的前后端分离的开源项目。需要找结构清晰、易于部署的项目,比如可能有Vue.js前端和Spring Boot后端的例子。比如用户提到的若依,但可能还有其他更简单的项目,比如一个博客系统或者待办应用,但若依比较成熟,文档全,适合学习。 然后,用户的环境还没搭建,需要指导安装Docker、k8s环境CentOS 7.9的步骤可能涉及Docker安装、Minikube或kubeadm的配置,以及Nginx的部署。但考虑到用户可能是在本地或单节点实验,Minikube可能更合适。 接下来,如何分步骤实现:用Docker容器化前后端,用K8s管理这些容器,用Nginx做入口控制器或负载均衡。需要解释每个步骤的作用,以及不同技术在此过程中的角色。 用户可能的问题点:Dockerfile的编写,K8s的YAML配置,Nginx的配置,以及如何联动这些服务。需要确保步骤详细,避免遗漏关键配置,比如Docker的网络设置,K8s的Service类型,Ingress的使用等。 另外,要比较三者的区别:Docker解决应用打包和隔离,K8s管理多个容器部署、扩展,Nginx处理流量路由和负载均衡。联动方面,Docker作为基础,K8s编排容器,Nginx作为入口点。 可能需要注意的常见错误:网络配置导致服务不可达,镜像构建失败,K8s的Pod调度问题,Ingress配置错误。需要提醒用户检查这些部分,或者提供调试方法。 最后,确保整个流程可行,并给出验证步骤,比如访问前端页面,测试API接口,确保各部分正常工作。同时,总结三者的区别和协作方式,帮助用户形成系统理解。</think>我将以分层递进的方式为您梳理技术差异和实现方案,以下为完整技术实现路径: 一、技术定位差异分析 1. Docker(容器化引擎) - 核心作用:应用打包和运行隔离 - 关键特征:镜像分层存储、进程级虚拟化 - 典型场景:构建标准化交付单元(镜像) 2. Kubernetes容器编排系统) - 核心作用:容器集群调度与管理 - 关键特征:自动扩缩容、服务发现、滚动更新 - 典型场景:管理跨节点容器组(Pod) 3. Nginx(网络服务组件) - 核心作用:流量调度与协议处理 - 关键特征:反向代理、负载均衡、HTTP缓存 - 典型场景:作为Ingress Controller或静态资源服务器 二、开源项目选型建议 推荐使用若依前后端分离版(RuoYi-Vue) 项目地址:https://gitee.com/y_project/RuoYi-Vue 技术栈:Spring Boot + Vue.js 优势:文档完善、技术栈主流、社区活跃 三、环境搭建步骤(CentOS 7.9) 1. 基础环境准备: ```bash # Docker安装 $ curl -fsSL https://get.docker.com | bash -s docker $ systemctl start docker # Minikube安装(单节点k8s) $ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 $ install minikube-linux-amd64 /usr/local/bin/minikube $ minikube start --driver=docker # 验证环境 $ docker --version $ kubectl version --client ``` 2. 项目容器化改造 前端Dockerfile示例: ```dockerfile FROM nginx:alpine COPY dist/ /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 ``` 后端Dockerfile示例: ```dockerfile FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] EXPOSE 8080 ``` 3. Kubernetes部署架构 ```mermaid graph TD A[Browser] --> B[Ingress(Nginx)] B --> C[前端Service] B --> D[后端Service] C --> E[前端Pod] D --> F[后端Pod] E --> G[前端容器] F --> H[后端容器] ``` 四、联动关系演示 1. Docker层操作 ```bash # 构建镜像 $ docker build -t frontend:v1 -f frontend/Dockerfile . $ docker build -t backend:v1 -f backend/Dockerfile . # 运行测试 $ docker run -p 8080:8080 backend:v1 $ docker run -p 80:80 frontend:v1 ``` 2. Kubernetes层配置 backend-deployment.yaml: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: backend spec: replicas: 2 selector: matchLabels: app: backend template: metadata: labels: app: backend spec: containers: - name: backend image: backend:v1 ports: - containerPort: 8080 ``` 3. Nginx Ingress配置 frontend-ingress.yaml: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ruoyi-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: frontend port: number: 80 - path: /api pathType: Prefix backend: service: name: backend port: number: 8080 ``` 五、技术联动对比表 | 技术维度 | Docker | Kubernetes | Nginx | |----------------|---------------------------|---------------------------|-------------------------| | 资源调度层级 | 单机容器管理 | 集群资源调度 | 网络流量调度 | | 核心关注点 | 应用隔离与打包 | 服务高可用与弹性扩展 | 请求路由与负载均衡 | | 配置管理方式 | Dockerfile + 环境变量 | YAML清单 + ConfigMap | conf文件 + Annotations | | 典型操作对象 | 容器/镜像 | Pod/Deployment/Service | Upstream/Server | | 健康检查机制 | HEALTHCHECK指令 | Liveness/Readiness Probe | 被动状态监测 | 六、实践验证流程 1. 部署验证命令: ```bash $ kubectl get pods -o wide $ kubectl get svc $ minikube service list ``` 2. 访问测试: ```bash # 前端访问 $ curl http://<ingress-ip>/ # API访问 $ curl http://<ingress-ip>/api/system/login ``` 3. 动态扩缩演示: ```bash $ kubectl scale deployment backend --replicas=3 $ kubectl get pods -w ``` 建议实践顺序:先完成Docker单容器部署,然后实现Kubernetes基础编排,最后通过Nginx Inress整合服务。每个阶段完成后使用`curl`或浏览器验证服务可达性,逐步构建完整部署链路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值