一个k8s集群——跨云服务器部署

本文详细记录了如何在不同云服务商的服务器上搭建跨云Kubernetes集群,并安装KubeSphere的过程。从安装Docker,配置Kubernetes,到初始化Master节点,再到加入Worker节点,最后部署KubeSphere并解决遇到的问题,如借助公网IP进行集群间通信,配置NFS文件系统和metrics-server等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

穷学生只买得起云厂商新人优惠服务器,想玩分布式只能搭建跨云集群,无奈不是一个云厂商不在同一vpc网络下,有很多坑特此记录一下

两台服务器,一台青云4c8g,一台腾讯云2c4g

1、安装Docker

sudo yum remove docker*
sudo yum install -y yum-utils

#配置docker的yum地址
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


#安装指定版本
sudo yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6

# 启动&开机启动docker
systemctl enable docker --now

# docker加速配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#设置每个机器自己的hostname,我这里是青云k8s-master,腾讯云k8s-node1
hostnamectl set-hostname k8s-master


# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

#关闭swap
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

#允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

2、安装Kubernetes



1、基本环境


每个机器使用内网ip互通
每个机器配置自己的hostname,不能用localhost

2、安装kubelet、kubeadm、kubectl

#配置k8s的yum源地址
cat <<EOF | sudo tee /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
EOF


#安装 kubelet,kubeadm,kubectl
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9

#启动kubelet
sudo systemctl enable --now kubelet

#所有机器配置master域名
echo "172.31.0.4  k8s-master" >> /etc/hosts

3、初始化master节点


1、初始化

kubeadm init \
--apiserver-advertise-address=172.31.0.4 \
--control-plane-endpoint=k8s-master \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16


2、记录关键信息
记录master执行完成后的日志

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):$(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/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join k8s-master:6443 --token 3vckmv.lvrl05xpyftbs177 \
    --discovery-token-ca-cert-hash sha256:1dc274fed24778f5c284229d9fcba44a5df11efba018f9664cf5e8ff77907240 \
    --control-plane 

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token 3vckmv.lvrl05xpyftbs177 \
    --discovery-token-ca-cert-hash sha256:1dc274fed24778f5c284229d9fcba44a5df11efba018f9664cf5e8ff77907240

token24小时过期,生成新的连接命令


kubeadm token create --print-join-command



3、安装Calico网络插件

curl https://docs.projectcalico.org/manifests/calico.yaml -O

kubectl apply -f calico.yaml


4、加入worker节点
由于不在一个内网,集群间通讯默认走内网ip,因此需要借助公网ip,通过iptables转换

#青云中设置内外网ip转换
iptables -t nat -A OUTPUT -d 青云外网ip -j DNAT --to-destination 青云内网ip

iptables -t nat -A OUTPUT -d 腾讯云内网ip -j DNAT --to-destination 腾讯云外网ip

同理腾讯云也要设置 内外网ip转换 注意转换顺序,让集群内部以为还是走内网ip


iptables -t nat -A OUTPUT -d 青云内网ip -j DNAT --to-destination 青云外网ip

iptables -t nat -A OUTPUT -d 腾讯云外网ip -j DNAT --to-destination 腾讯云内网ip

腾讯云node节点加入master:
kubeadm join  172.31.0.2:6443 --token 26lrwn.fjaubhknw2gq6vhv     --discovery-token-ca-cert-hash sha256:5ab4e81cd63dc410d89ab673b7f204cb27af48127c6eaf35afc71ffdc0c15f67

连接成功

[preflight] Running pre-flight checks
	[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.7. Latest validated version: 19.03
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the k
### 部署 Kubernetes 和 Hadoop 的概述 在三台云服务器部署 Kubernetes 和 Hadoop 可以为分布式计算提供强大的基础设施支持。此过程涉及多个组件和服务的配置,包括但不限于网络设置、存储管理以及集群初始化。 #### 准备工作环境 为了确保顺利安装,每台服务器需满足最低硬件需求并预先安装必要的软件包: - 更新操作系统至最新版本 - 安装 Docker CE 作为容器运行时引擎[^1] - 关闭防火墙或开放所需端口以允许节点间通信 ```bash sudo apt-get update && sudo apt-get upgrade -y curl -fsSL https://get.docker.com | sh - sudo systemctl enable docker ``` #### 构建 Kubernetes 集群 采用 kubeadm 工具简化 Master 节点与 Worker 节点之间的协调操作流程。具体步骤如下所示: ##### 初始化 Master Node 选择一台机器作为主控单元执行以下命令来启动控制平面服务: ```bash sudo swapoff -a # 禁用交换分区 sudo kubeadm init --pod-network-cidr=10.244.0.0/16 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml # 应用 Pod 网络插件 ``` ##### 加入 Worker Nodes 其余两台设备通过 `kubeadm join` 命令加入到现有集群中去, 具体 token 参数由 master node 输出获得. ```bash sudo kubeadm join <master-ip>:<master-port> --token <token> ``` #### 设置 HDFS 文件系统 完成 K8S 平台搭建之后即可着手准备大数据处理框架——Hadoop 的集成事宜。这里推荐利用 Helm Chart 来加速应用层面上线速度。 首先添加 Apache Spark & Hadoop charts repository 到本地 helm client 中以便后续调用: ```bash helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator helm install my-hdfs incubator/hdfs ``` 上述指令会自动创建 NameNode 和 DataNodes 实例,并将其挂载于先前构建好的 Kube Cluster 上面形成统一资源池供应用程序访问使用[^2].
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值