前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubeadm搭建k8s集群(CVM环境)

kubeadm搭建k8s集群(CVM环境)

原创
作者头像
Basasuya
修改2022-10-02 15:45:36
1.2K0
修改2022-10-02 15:45:36
举报
文章被收录于专栏:云原生专栏云原生专栏

0.环境说明

云服务器(CVM),腾讯云

ubuntu 18.04 环境

docker: 20.10.7

k8s: 1.23.3

节点

规格

vm-0-19-ubuntu(172.17.0.19, 内网IP,主节点)

2C4G

vm-0-16-ubuntu(172.17.0.16, 内网IP)

2C2G

vm-0-18-ubuntu(172.17.0.18, 内网IP)

2C2G

k8s 官方要求每个节点必须在2C以上才能运行

1. 安装依赖

k8s需要不同节点之前的TCP连接,由于三个节点属于同一子网,我这里配置了三个节点之前的TCP连接

将三个节点之间的入站和出战的不同TCP端口都进行了开放

允许节点间TCP连接
允许节点间TCP连接
查看私有网络地址
查看私有网络地址

首先在主节点上配置

代码语言:shell
复制
# 0.进入root权限,便于后面的命令
# 设置root的密码,已有可以跳过
sudo passwd root
# 进入root
su root

# 1.关闭swap分区
swapoff -a

# 2.确保三个节点的时区一致
timedatectl

# 3.网络问题
sudo modprobe br_netfilter
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 vi /etc/sysctl.d/10-network-security.conf
## 添加以下两行配置
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

sudo sysctl --system

# 4.安装 docker
apt-get install docker.io

#调整cgroup驱动
sudo vi /etc/docker/daemon.json
## 添加以下配置,也可以考虑将镜像源也加一下
{
  "exec-opts": ["native.cgroupdriver=systemd"],
}
sudo systemctl restart docker


# 5.安装 k8s组件
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF 
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectl

# 6. 启动main节点
# 172.16.0.0/16 必须和 云服务器的私有网络(IPv4 CIDR)不一样
# 我的私有网络是 172.17.0.0/16
kubeadm init --pod-network-cidr 172.16.0.0/16 \
--apiserver-advertise-address=172.17.0.19 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers


# 7. 退出root模式,并将配置文件加入
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 8. 配置k8s网络
# 默认情况下 master节点不能部署非system类型的pod,这里通过taint来允许这样的行为
kubectl taint nodes --all node-role.kubernetes.io/master-
# 从 https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 下载为flannel.yaml
# 将
#  net-conf.json: |
#    {
#      "Network": "10.244.0.0/16",
#      "Backend": {
#        "Type": "vxlan"
#      }
#    }
#  中的10.244.0.0/16改为172.16.0.0/16

kubectl apply -f flannel.yaml

kubectl get nodes
# 如果 发现主节点是Ready,证明配置成功
# NAME             STATUS   ROLES                  AGE     VERSION
# vm-0-19-ubuntu   Ready    control-plane,master   15m   v1.23.3

2. 添加节点 与重启

子节点通过一行命令就可以添加成功,这些节点在运行kubeadm join之前需要执行上小节中0到5的内容,

主节点在kubeadm init后会打印一条kubeadm join的命令,直接在子节点运行即可

代码语言:shell
复制
kubeadm join 172.17.0.19:6443 --token rneqy1.mn1viwqrwgj56vrt \
	--discovery-token-ca-cert-hash sha256:0353c937fe38ee836203d0720255a8168136a44e335e3cf5ff1abc7e49d0a872
	
# 添加节点之后在主节点运行kubectl get nodes发现Ready的新节点就说明

重启:

代码语言:shell
复制
# 所有节点在kubeadm reset 之后还需要以下几行命令
echo y | kubeadm reset
rm -f /etc/kubernetes/manifests/*
rm -rf /var/lib/etcd/*
ip link set cni0 down
ip link delete cni0
systemctl restart containerd && systemctl restart kubelet


部分参考

https://segmentfault.com/a/1190000040780446

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.环境说明
  • 1. 安装依赖
  • 2. 添加节点 与重启
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档