基于ECS云主机搭建k8s集群-详细过程

本文记录了在3台2C4G的ECS百度云服务器上部署Kubernetes集群的详细步骤,包括Kubernetes安装准备、Docker服务安装、必备工具安装以及主从节点配置。遇到的问题包括Node节点连接拒绝和Docker网络冲突,并提供了解决方案。

K8S集群部署过程耗时:不到1小时。

经过最近几次的k8s部署操作,自己也是踩过很多坑,总结记录一下详细、完整的部署过程,供对Kubernetes感兴趣的朋友参考,一起学习;

本次使用的3台2C4G的ECS百度云服务器,确保可以相互访问,如果跨VPC,可以建立“对等连接”:

主机名

IP

角色

操作系统

k8s-master

192.168.16.4

master

CentOS Linux 7.9

k8s-node01

192.168.16.5

node-01

CentOS Linux 7.9

k8s-node02

172.17.22.4

node-02

CentOS Linux 7.9

一、Kubernetes安装准备

全部节点执行:

1、关闭 SELinux 

## 临时并永久关闭SELinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2、关闭防火墙

## 临时并永久关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

3、关闭SWAP

# 1、临时并永久关闭交换空间
swapoff -a &&  sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 

# 2、查看是否关闭成功
free -m

4、修改名hosts文件(/etc/hosts)

cat  >> /etc/hosts << EOF
192.168.16.4 k8s-master
192.168.16.5 k8s-node01
172.17.22.4 k8s-node02
EOF

5、配置ECS云服务器的主机名

# 在各自对应的主机上执行对应操作
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

二、安装 Docker 服务

1、卸载旧版本

yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine

2、安装依赖包

yum install -y yum-utils

3、设置镜像仓库

Docker默认的国外官方镜像库拉取会非常慢,建议改用国内阿里云地址

yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   #地址为国内阿里云地址

4、更新YUM索引

yum makecache

5、安装 Docker

直接安装最新版

#docker-ce 表示社区版,ee 表示企业版,默认安装最新版
yum -y install docker-ce docker-ce-cli containerd.io 

6、启动Docker

systemctl start docker
systemctl enable docker #设置开机启动

7、查看信息

1、查看Docker 启动版本
docker version
​
# 2、查看信息
docker info
​
# 3、测试docker 服务
docker run hello-world

在K8S中建议Docker与K8S使用的Cgroupdriver值为 “systemd”,所以每一个节点还需要进行如下的修改 :

## Create /etc/docker directory.
mkdir /etc/docker

# Setup daemon.
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"
  ]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

# Restart Docker
systemctl daemon-reload
systemctl restart docker

三、安装 Kubernetes 必备工具

#1、配置YUM源
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

# 2、所有节点安装必备工具,版本不加默认为最新版,也可以指定版本号
yum  -y  install kubelet kubeadm kubectl --disableexcludes=kubernetes(用自定义的Kubernetes)

# 3、启动服务(设置系统重启后自动启动)
systemctl enable kubele
<think>好的,用户现在想了解如何在Linux上安装Kubernetesk8s集群,是否需要费用,并且要安装两台机器作为集群。首先,我需要确定用户的需求。他们可能是在尝试搭建自己的开发或测试环境,或者是小规模的生产环境。用户提到“不需要用钱吗?”,这说明他们可能希望使用免费的开源解决方案,避免商业服务带来的费用。 接下来,我需要回忆Kubernetes的不同安装方式。常见的有kubeadm、Minikube、k3s等。其中kubeadm是官方推荐的用于生产环境的工具,适合多节点集群,而Minikube主要用于单节点学习,k3s则轻量适合边缘计算或资源有限的环境。用户需要两台机器组成集群,所以kubeadm可能更合适。 然后,用户关心是否需要费用。Kubernetes本身是开源的,免费使用,但如果用户计划在云上部署虚拟机来安装,可能会涉及云服务费用。不过用户可能是在本地物理机或虚拟机上安装,所以费用可能为零,只要他们有自己的硬件资源。 接下来,安装步骤方面,需要分节点准备,包括禁用交换分区、设置主机名、安装容器运行时(如containerd或Docker)、安装kubeadm/kubelet/kubectl、初始化控制平面、添加工作节点等。需要注意的是,网络插件如Calico或Flannel是必须的,否则Pod之间无法通信。此外,可能需要配置防火墙规则,尤其是如果用户的两台机器之间有防火墙的话。 用户可能遇到的常见问题包括网络配置错误、节点之间无法通信、证书问题等。需要提醒用户检查各节点的hosts文件,确保主机名解析正确,以及关闭SELinux和防火墙,或者开放必要端口。另外,使用kubeadm初始化时可能需要调整参数,比如指定apiserver的地址。 对于两台机器的集群,一台作为控制平面(master),另一台作为工作节点(worker)。控制平面节点需要运行kube-apiserver、etcd等组件,而工作节点主要运行kubelet和容器运行时。不过,从Kubernetes 1.24开始,默认不再包含Docker作为容器运行时,所以用户需要安装containerd或CRI-O。这一点需要明确说明,避免用户按照过时的教程操作。 另外,用户可能对高可用性有疑问,但两台机器的集群通常不配置高可用,因为etcd需要奇数个节点来避免脑裂问题。不过对于测试环境,单控制平面加上一个工作节点已经足够。如果用户未来需要扩展,可以再添加节点。 最后,总结是否需要费用:软件本身免费,但硬件资源可能需要自备。如果用户使用自己的机器或虚拟机,没有额外费用。如果是云服务器,费用取决于云服务商。安装步骤需要按照官方文档一步步来,确保依赖项正确安装,网络插件配置正确,节点加入集群的命令正确无误。 可能还需要提醒用户备份重要数据,尤其是在初始化集群时,避免误操作导致数据丢失。另外,提供一些验证集群是否正常工作的命令,比如kubectl get nodes,查看节点状态是否为Ready,以及部署测试应用如nginx来确认Pod调度和网络是否正常。</think>### Kubernetesk8s)在 Linux 上的安装与集群搭建指南 --- #### 一、安装前的核心问题解答 1. **是否需要付费?** - **Kubernetes 本身是开源免费的**,安装和使用无需任何费用。 - **硬件成本**:如果使用自有物理机或虚拟机(如 VirtualBox、VMware),则无额外费用;若使用云服务器(如 AWS EC2、阿里云 ECS),需支付云主机费用。 2. **两台机器的用途**: - **控制平面(Master 节点)**:负责集群管理和调度(如 API Server、Scheduler、Controller Manager)。 - **工作节点(Worker 节点)**:运行实际应用容器(如 Pod、Deployment)。 --- #### 二、环境准备(两台 Linux 机器) 1. **系统要求** - **操作系统**:Ubuntu 22.04/CentOS 7+/Debian 11 等主流 Linux 发行版。 - **硬件配置**: - Master 节点:2 CPU、4GB 内存、20GB 磁盘。 - Worker 节点:1 CPU、2GB 内存、20GB 磁盘。 - **网络要求**: - 所有节点间可通过 IP 互相通信(关闭防火墙或开放端口:6443、2379-2380、10250-10255)。 2. **所有节点通用配置** ```bash # 1. 禁用交换分区(必须) sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab # 永久禁用 # 2. 设置主机名解析(替换实际 IP 和主机名) sudo vi /etc/hosts # 添加以下内容(示例 IP 和主机名): 192.168.1.100 master 192.168.1.101 worker # 3. 加载内核模块 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 4. 配置网络参数 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system ``` --- #### 三、安装容器运行时(所有节点) 推荐使用 **containerd**(Kubernetes 官方支持): ```bash # 1. 安装 containerd sudo apt-get update && sudo apt-get install -y containerd # Ubuntu/Debian sudo yum install -y containerd # CentOS/RHEL # 2. 配置 containerd sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml sudo systemctl restart containerd sudo systemctl enable containerd ``` --- #### 四、安装 Kubernetes 组件(所有节点) 1. **安装 kubeadm、kubelet、kubectl** ```bash # Ubuntu/Debian sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 禁止自动更新 # CentOS/RHEL cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key EOF sudo yum install -y kubelet kubeadm kubectl sudo systemctl enable --now kubelet ``` --- #### 五、初始化 Master 节点 1. **执行初始化命令**(仅在 Master 节点运行) ```bash sudo kubeadm init --apiserver-advertise-address=192.168.1.100 # 替换为 Master 节点 IP ``` 2. **配置 kubectl** ```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. **安装网络插件(Calico)** ```bash kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml ``` --- #### 六、将 Worker 节点加入集群 1. **在 Worker 节点执行加入命令** - 初始化 Master 节点时,终端会输出类似以下命令: ```bash kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash> ``` - 在 Worker 节点上运行此命令(需 `sudo` 权限)。 2. **验证集群状态** ```bash kubectl get nodes # 所有节点状态应为 Ready ``` --- #### 七、关键注意事项 1. **防火墙配置** - 确保 Master 和 Worker 节点开放以下端口: - **Master 节点**:6443 (API Server), 2379-2380 (etcd), 10250 (kubelet) - **Worker 节点**:10250 (kubelet), 30000-32767 (NodePort 服务) 2. **持久化存储(可选)** - 如需持久化数据,需额外配置存储类(如 NFS、Ceph)。 3. **高可用性(可选)** - 若需高可用控制平面,需部署多个 Master 节点并配置负载均衡。 --- #### 八、成本总结 - **软件成本**:$0(Kubernetes 及相关工具完全免费)。 - **硬件成本**:取决于机器来源(自有设备 $0,云服务器按需付费)。 --- ### 最终效果 完成上述步骤后,你将拥有一个由两台机器组成的 Kubernetes 集群- **Master 节点**:负责集群管理。 - **Worker 节点**:运行实际应用负载。 可通过以下命令验证: ```bash kubectl get nodes # 应显示两个节点且状态为 Ready kubectl create deployment nginx --image=nginx # 测试部署 kubectl get pods # 查看 Pod 是否正常运行 ```
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值