使用kubeadm搭建k8s集群
1、初始化集群信息
这里我才用了两台虚拟机来搭建集群,一个master,一个node
角色 |
IP地址 |
组件 |
master |
192.168.126.137 |
docker, kubectl, kubeadm, kubelet |
node1 |
192.168.126.138 |
docker, kubectl, kubeadm, kubelet |
2、设置系统主机名以及host文件相互解析
hostnamectl set_hostname master
hostnamectl set_hostname node1
两台机器都修改/etc/hosts文件为
192.168.126.137 master
192.168.126.138 node1
3、为sudo设置无密码
修改 /etc/suoders,该文件默认无写操作文件,需要先修改文件权限,之后再恢复。千万不要修改权限为777,会造成无法使用。修改内容为:
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
4、关闭swap分区
这是一个经过讨论的结论,当内存不足时,linux会自动使用swap,将部分内存数据存放到磁盘中,会影响性能上的不确定性,官方1.8版本之后就默认不用了,除非通过参数强制打开。
swapoff -a vim /etc/fstab
删除带有swap的所在行
5、安装docker并配置cgroup驱动程序
apt install docker.io
容器运行时和kubectl都会有一个名为"cgroup driver"的属性,以此来对linux机器上的cgroup管理,对于基于Kubeadm的安装,推荐使用systemd驱动,不推荐使用cgroupfs。这里Kubeadm在init的时候,会默认设置为systemd。
但在docker上的cgroup driver默认使用cgroupfs,这里需要更改为systemd。
vim /etc/docker/daemon.json {
"exec-opts": ["native.cgroupdriver=systemd"]
} systemctl daemon-reload
systemctl restart docker
6、让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
7、更新 apt 包索引并安装使用 Kubernetes apt 存储库所需的包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
8、安装 kubeadm
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
9、更新apt包索引,安装kubelet、kubeadm和kubectl,并锁定版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
10、通过kubeadm初始化集群
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-advertise-address=192.168.126.137
更多参数说明详见官方文档:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file
如果想要kubectl在非root用户下工作,需要运行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果是root用户工作,需要运行
export KUBECONFIG=/etc/kubernetes/admin.conf
默认情况下,出于安全原因,集群不会在控制平面节点上调度 Pod。如果希望能够在控制平面节点上调度 Pod,需要执行
kubectl taint nodes --all node-role.kubernetes.io/master-
11、安装pod网络插件
需要部署一个容器网络接口(CNI)基于pod网络的附加组件,来支持pod之间可以相互通信,在未安装之前,集群的DNS(CoreDNS)不会启动,节点也会处于NotReady状态,最好只安装一种网络插件,这里提供两种。
11.1、calico插件
这里使用calico的插件,官方文档见https://docs.projectcalico.org/getting-started/kubernetes/quickstart
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
11.2、flannel插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
12、工作节点加入主节点
2-9的步骤,在工作节点上也需要执行,在第10步执行完毕后,会出现下面的提示,来让你直接将工作节点加入集群
在工作节点直接执行上面的命令即可,模板见下,如果没记住上述的信息,需要重新获取token和hash
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
12.1、获取token
kubeadm token list
输出类似:
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
i3alge.g5svy9uvg32pysn8 3h 2021-11-18T10:28:11Z authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
12.2、获取hash
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
输出类似:
9ae1248a35f868671790b8cc9ec75a9b2701fece96d14ffae56fcdd70e16fd33
13、查看集群
kubectl get nodes
使用kubeadm搭建k8s集群的更多相关文章
- kubeadm搭建K8s集群及Pod初体验
基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...
- kubeadm 搭建 K8S集群
kubeadm是K8s官方推荐的快速搭建K8s集群的方法. 环境: Ubuntu 16.04 1 安装docker Install Docker from Ubuntu’s repositories: ...
- CentOS7 使用 kubeadm 搭建 k8s 集群
一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...
- 使用Kubeadm创建k8s集群之部署规划(三十)
前言 上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群. 部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲).因此 ...
- kubeadm 搭建kubernetes集群环境
需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...
- 如何处理 Kubeadm 搭建的集群证书过期问题
Kubeadm 证书过期处理 以下内容参考了如下链接:https://www.cnblogs.com/skymyyang/p/11093686.html 一.处理证书已过期的集群 使用 kubeadm ...
- kubeadm搭建kubernetes集群之三:加入node节点
在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...
- kubeadm搭建kubernetes集群之二:创建master节点
在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...
- 使用Kubeadm创建k8s集群之节点部署(三十一)
前言 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案.不 ...
随机推荐
- mysql导入文件 日期时间报错:[Err] 1067 - Invalid default value for 'active_time'
报错原因意思是说:mysql5.7版本中有了一个STRICT mode(严格模式),而在此模式下默认是不允许设置日期时间的值为全0值的,所以想要 解决这个问题,就需要修改sql_mode的值. 修改 ...
- C++之面试题(4)
题目描述 来源:牛客网 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素. 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在 ...
- c++计算 char数组CRC算法
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 我使用的OS:win7. 我使用的开发环境:VS2010 + sp1 算法源码: 1 uns ...
- 【LeetCode】42. Trapping Rain Water 接雨水 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力求解 保存左右最大值 单调栈 日期 题目地址:ht ...
- 【LeetCode】1064. Fixed Point 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力求解 日期 题目地址:https://leetco ...
- 【LeetCode】34. Find First and Last Position of Element in Sorted Array 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 日期 题目地址:https://leetc ...
- 【LeetCode】709. To Lower Case 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 ASIIC码操作 日期 题目地址:https:// ...
- [Kaiming]Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
目录 概 主要内容 PReLU Kaiming 初始化 Forward case Backward case He K, Zhang X, Ren S, et al. Delving Deep int ...
- rabbitmq-安装部署及基础操作
rabbitmq 官网: https://www.rabbitmq.com/ yum 安装 rabbitmq # centos7 # In /etc/yum.repos.d/rabbitmq.repo ...
- 对比显示每条线路的价格和该类型线路的平均价格,分别使用子查询和 exists 获取线路数量
查看本章节 查看作业目录 需求说明: 对比显示每条线路的价格和该类型线路的平均价格 分别使用子查询和 exists 获取线路数量超过"出境游"线路数的线路类型信息,要求按照线路数升 ...