使用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 相关文章推荐
Apache站点配置SSL强制跳转443
Mar 09 Servers
nginx请求限制配置方法
Jul 09 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
Nginx实现负载均衡的项目实践
Mar 18 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
Vertica集成Apache Hudi重磅使用指南
Mar 31 Servers
nginx location 带斜杠【 / 】与不带的区别
Apr 13 Servers
Tomcat项目启动失败的原因和解决办法
Apr 20 Servers
nginx实现多geoserver服务的负载均衡
May 15 Servers
apache ftpserver搭建ftp服务器
May 20 Servers
Nginx静态压缩和代码压缩提高访问速度详解
May 30 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
Jul 15 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
JQUERY操作JSON实例代码
2010/02/09 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
python获取Linux发行版名称
2019/08/30 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
网上开商店的创业计划书
2014/01/19 职场文书
社区好人好事材料
2014/12/26 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS