使用kubeadm命令行工具创建kubernetes集群


Posted in Servers onMarch 31, 2022

命令行工具

主要有三个工具,命令行工具使用 kube 前缀命名。

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。

通过软件仓库安装

方法 ①

此方法是通过 Google 的源下载安装工具包。

更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

下载 Google Cloud 公开签名秘钥:

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

添加 Kubernetes apt 仓库:

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:

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

方法 ②

通过阿里云的源下载安装工具包。

通过命令直接添加源。

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add

然后更新软件源并安装这三个工具。

apt-get update && apt-get install -y apt-transport-https curl
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated

执行命令检查是否正常:

kubeadm --help

二进制文件下载安装

查看 kubectl 最新稳定版本:

curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt

笔者当前查询到的稳定版本是 v1.20.2。

下载 kubectl 可执行文件,可替换 URL 中的版本号。

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl

下载后,目录可以看到一个 kubectl 文件,40MB 大小,国内下载速度稍慢,有可能无法下载,做好心理准备。

然后需要为其赋予可执行文件权限。

sudo chmod +x ./kubectl

为了可以直接使用 kubectl ,可以将文件复制到 bin 目录。

sudo mv ./kubectl /usr/local/bin/kubectl

执行命令输出版本号,检查是否安装成功。

kubectl version --client

输出:

Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.0", GitCommit:"af46c47ce925f4c4ad5cc8d1fca46c7b77d13b38", GitTreeState:"clean", BuildDate:"2020-12-08T17:59:43Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}

ubutu & centos 快速安装

只是这里介绍一下 ubuntu 和 centos 不同的安装方法,已经通过前面的安装方法安装好,则不需要理会这一小节。

Ubuntu 和 Debain 等系统可以使用以下命令通过软件仓库安装:

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

Centos、RHEL 等系统可以使用以下命令通过软件仓库安装:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet kubeadm kubectl

创建 kubernetes 集群

前面介绍了如何按照这三个工具,如果你没有服务器,我们可以使用开源组织提供的线上服务器进行测试。

地址:https://katacoda.com/

我们在第一个 node 中操作,创建 master。执行 hostname -i 查看此 node 的 ip。

Kubeadm 是一个提供了 kubeadm init 和 kubeadm join 的工具,作为创建 Kubernetes 集群的 “快捷途径” 的最佳实践。

1,创建 Master

我们初始化一个 API Server 服务,绑定地址为 192.168.0.8(按照你的ip改)。此步骤创建了一个 master 节点。

注:可以直接使用 kubeadm init,它会自动使用默认网络ip。

kubeadm init --apiserver-advertise-address 192.168.0.8

完成后,会提示:

kubeadm join 192.168.0.8:6443 --token q25z3f.v5uo5bphvgxkjnmz \
	--discovery-token-ca-cert-hash sha256:0496adc212112b5485d0ff12796f66b29237d066fbc1d4d2c5e45e6add501f64

保存下来,后面备用。

如果有提示 Alternatively, if you are the root user, you can run:则你还需要执行下面的命令。

export KUBECONFIG=/etc/kubernetes/admin.conf

2,然后初始化集群网络。

接着执行初始化命令处理配置。注意,需要 admin.conf 才能执行命令,否则会报 The connection to the server localhost:8080 was refused - did you specify the right host or port? 。

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

然后执行这个命令初始化。

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

成功的话会提示:

serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.apps/weave-net created

3,加入集群

再创建一个新的节点(另一台服务器),执行 hostname -i 查看 ip。

在第二个节点中,执行命令,加入集群。请替换命令中的 192.168.0.8 为正确的 master 节点 的 ip。

kubeadm join 192.168.0.8:6443 --token q25z3f.v5uo5bphvgxkjnmz \
	--discovery-token-ca-cert-hash sha256:0496adc212112b5485d0ff12796f66b29237d066fbc1d4d2c5e45e6add501f64

接着新建第二第三个 node,执行上面的 kubeadm join 命令,加入集群。

如果出现 failed to parse kernel config: unable to load kernel module,说明 docker 版本太高,需要降级。

查看 docker 版本:yum list installed | grep docker 和 docker version

降级 docker 版本。

dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
dnf -y install dnf-plugins-core
dnf install docker-ce-18.06.3.ce-3.el7 docker-ce-cli containerd.io

不行的话就按照 https://docs.docker.com/engine/install/centos/ 安装。

注意,docker version 会看到 client 和 server 版本,两者的版本号可能不一致。

清除环境

如果步骤做错了或者想重来,可以执行 kubeadm reset [flags] 命令。

注:只执行 kubeadm reset 命令无效。

[flags] 有四种类型:

preflight              Run reset pre-flight checks
update-cluster-status  Remove this node from the ClusterStatus object.
remove-etcd-member     Remove a local etcd member.
cleanup-node           Run cleanup node.

我们需要执行:

kubeadm reset cleanup-node 
kubeadm reset

到此这篇关于使用kubeadm命令行工具创建kubernetes集群的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Servers 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
zabbix自定义监控nginx状态实现过程
Nov 01 Servers
教你快速构建一个基于nginx的web集群项目
Nov 27 Servers
解决xampp安装后Apache无法启动
Mar 21 Servers
Z-Order加速Hudi大规模数据集方案分析
Mar 31 Servers
Kubernetes部署实例并配置Deployment、网络映射、副本集
Apr 01 Servers
Windows Server 2012 修改远程默认端口3389的方法
Apr 28 Servers
鲲鹏 CentOS 7 安装Python3.7
May 11 Servers
Nginx 匹配方式
May 15 Servers
Tomcat 与 maven 的安装与使用教程
Jun 16 Servers
apache虚拟主机配置的三种方式(小结)
Jul 23 Servers
Flink 侧流输出源码示例解析
Sep 23 Servers
Minikube搭建Kubernetes集群
Apache Pulsar结合Hudi构建Lakehouse方案分析
Apache Hudi的多版本清理服务彻底讲解
Z-Order加速Hudi大规模数据集方案分析
Mar 31 #Servers
深入解析Apache Hudi内核文件标记机制
Apache Hudi数据布局黑科技降低一半查询时间
Apache Hudi集成Spark SQL操作hide表
You might like
php.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
ES6 十大特性简介
2020/12/09 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python select.select模块通信全过程解析
2017/09/20 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
django模板结构优化的方法
2019/02/28 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
python保留小数位的三种实现方法
2020/01/07 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
2020/04/17 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
微笑面对生活演讲稿
2014/05/13 职场文书
服务口号大全
2014/06/11 职场文书
临时租车协议范本
2014/09/23 职场文书
社区工作者个人总结
2015/02/28 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书