IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 不同局域网内的多台服务器组建k8s集群 -> 正文阅读

[系统运维]不同局域网内的多台服务器组建k8s集群

为了学习k8s,想先搭个集群玩一下,没想到这一搭就是3天,还没有完全完善,先把前面的步骤给记录一下以免忘记。

由于我是一台学校内的自己建的服务器,一台是购买的腾讯云的服务器,因此不在同一个局域网内,节点之间无法直接通信,给搭建带来了许多麻烦,参考了N多文章总结出下述版本。

1.设备准备

两台服务器,均是2核、4G内存以上配置,一台ubuntu16系统,一台ubuntu18系统。默认都在root模式下,sudo su开启。

2.环境准备

2.1内核参数调整(还没研究作用)

cat > k8s.conf <<EOF
#开启网桥模式
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#开启转发
net.ipv4.ip_forward = 1
##关闭ipv6
net.ipv6.conf.all.disable_ipv6=1
EOF
cp k8s.conf /etc/sysctl.d/k8s.conf
sysctl -p /etc/sysctl.d/k8s.conf

2.2修改主机名

vi /etc/hostname
vi /etc/hosts
#其中每一台服务器都需要修改,并且要把所有的hostip hostname数据对都写入hosts文件中
#其中hostip如果是内网的话,就写各自服务器对应的内网ip,如果是跨局域网连接,这里可能要写对应的公网ip

?

2.3关闭防火墙、swap分区

# 为了方便本操作关闭了防火墙,也建议你这样操作
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 临时关闭 swap
swapoff -a
#开启
swapoff -a
#永久关闭
# 用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出
vi /etc/fstab

2.4调整时区一致

timedatectl status #检查所有节点的时区时间是否一致,如果不一致可以执行下列命令

# 设置系统时区为 中国/上海
timedatectl set-timezone Asia/Shanghai
# 将当前的UTC时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart cron

2.5日志服务设置

默认有两个日志服务,使用journald关闭rsyslogd

mkdir /var/log/journal # 持久化保存日志的目录
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化
Storage=persistent

# 压缩历史日志
Compress=yes

SysnIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000

# 最大占用空间 10G
SystemMaxUse=10G

# 单日志文件最大 200M
SystemMaxFileSize=200M

# 日志保存时间 2 周
MaxRetentionSec=2week

# 不将日志转发到 syslog
ForwardToSyslog=no

EOF

systemctl restart systemd-journald

2.6虚拟网卡设置(最关键的一步!)

对于跨局域网的节点来说,一定要有外部方法来使得它们之间的信息可以互通,尤其是在当前采用公网ip来搭建k8s集群。通过查阅发现一般有三种方法:

1.利用iptables转发

2.虚拟网卡,在本地虚拟一个绑定公网IP的网卡,把内网的流量复制过来

3.看能不能设置etcd监听的IP。参考k8s——部署基于公网的k8s集群 - 知乎

本文采用第二种方法

首先ubuntu开启ipvs

lsmod | grep ip_vs #检查是否有开启

#临时开启ip_vs
for i in $(ls /lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i; done

#永久开启
ls /lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*" >> /etc/modules

然后建立虚拟IP

#ifconfig查看网卡有哪些
#临时建立虚拟网卡,注意如果多个服务器都是公网内网分离,则都需要建立虚拟网卡
ifconfig eth1:0 公网IP netmask 255.255.255.0 up
#删除
ifconfig eth1:0 down

#永久建立
vim  /etc/network/interfaces
auto eth1:0  
iface eth1:0 inet static  
name Ethernet alias LAN card  
address 192.168.33.149 
netmask 255.255.255.0  
broadcast 192.168.33.255

/etc/init.d/networking restart



观察参数修改是否生效命令:

sysctl --system

?

3.docker安装

这一步我是直接参考菜鸟的教程,也可以参考网上各个教程

Ubuntu Docker 安装 | 菜鸟教程

例如下述步骤

# 安装 Docker CE
# 设置仓库
# 安装所需包
yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

# 新增 Docker 仓库,速度慢的可以换阿里云的源。
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 建议国内网络替换为阿里云源地址
# http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 Docker CE,可以换成最新版本.
yum install -y containerd.io-1.2.10 \
    docker-ce-19.03.4 \
    docker-ce-cli-19.03.4

# 启动 Docker 并添加开机启动
systemctl start docker
systemctl enable docker

4.k8s相关组建安装

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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF


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

修改kubelet的文件

vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf

# 注意,这步很重要,如果不做,节点仍然会使用内网IP注册进集群
# 在末尾添加参数 --node-ip=公网IP

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=公网ip

5.创建master节点

采用kubeadm工具辅助创建,一般有两种模式

kubeadm init --config=xxx.xx

kubeadm init --......一些配置

这里采用第一种模式,建立下列kubeadm.yaml文件,然后运行第一条命令即可

apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.23.0
apiServer:
  certSANs:    #填写所有kube-apiserver节点的hostname、IP、VIP
  - master    #请替换为hostname
  - 175.24.199.49   #请替换为公网
  - 10.0.12.15  #请替换为私网
  - 10.96.0.1   #不要替换,此IP是API的集群地址,部分服务会用到
controlPlaneEndpoint: 175.24.199.49
networking:
  podSubnet: 192.168.0.0/16  //这里需要根据你使用的网络插件来更换,例如calico就用这个,falnnel需要换成10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
kubeProxy:
        config:
              mode: ipvs #kubeproxy采用ipvs的方式
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

如果失败了,就在init命令最后添加-v=10来查看什么错误。并通过kubeadm reset删除原有安装,别忘了如果配置了网络之类的都要单独删除,具体reset命令完成后会给提示。

运行成功以后,需要运行

 mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

从节点运行(注意这里如果是腾讯云服务器,要在防火墙规则里添加端口6443—TCP允许通过规则)

kubeadm join 公网ip:6443 --token akiuj0.43tnlcp33c8ztycn \
        --discovery-token-ca-cert-hash sha256:f22ff568135c06296e98972cec62a9e1f5af0f8cf8f50811c43129523ace3a16 

至此一个master一个worker就都已经组建完成了,master还需要配置网络才能真正启动。

1)Calico插件安装:

wget https://docs.projectcalico.org/manifests/calico.yaml

Vim calico.yaml 修改 CALICO_IPV4POOL_CIDR参数和pod-network-cidr一致

kubectl apply -f calico.yaml

2)flannel插件安装:

wget?https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl apply -f kube-flannel.yml

3)weave插件安装:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:22:28  更:2021-12-14 16:23:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:52:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码