本篇介绍利用 kubernetes 的命令行工具,快速创建集群实例,完成 hello world 实践。

上一篇试用 minikube 去搭建集群,这一篇将介绍通过 kubeadm 去操作。

命令行工具

主要有三个工具,命令行工具使用 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 initkubeadm 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 dockerdocker 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

浅入kubernetes(5):尝试kubeadm的更多相关文章

  1. 浅入Kubernetes(6):CKAD认证中的部署教程

    目录 预设网络 kubeadm 安装 k8s 配置 calico 自动补全工具 状态描述 目前为止,笔者已经写了 5 篇关于 k8s 的文章,这一篇笔者将介绍 CKAD 认证官方课程中,如何部署 k8 ...

  2. 浅入Kubernetes(8):外网访问集群

    目录 查询 Service Service 外部服务类型 配置 ServiceType 伸缩数量 阶段总结 在前面几篇文章中,我们学习了 kubeadm .kubectl 的一些命令,也学会了 Dep ...

  3. 浅入Kubernetes(11):了解 Service 和 Endpoint

    目录 Srevice Service 的创建及现象 Service 定义 Endpoint slices 创建 Endpoint.Service Service 创建应用 创建 Endpoint 浅入 ...

  4. 浅入Kubernetes(7):应用部署实例,Deployment、Service、ReplicaSet

    目录 Deployment 创建 Deployment kubectl apply/create 网络端口映射和更新 Deployment ReplicaSet 在本文之前,你需要阅读: 尝试 kub ...

  5. 浅入Kubernetes(10):控制节点的部署,选择器、亲和性、污点

    目录 标签和nodeSelector 标签选择 亲和性和反亲和性 污点和容忍度 系统默认污点 容忍度 DaemonSet 在前面的学习中,我们学到了 Deployment 部署,以及副本数(Repli ...

  6. 浅入kubernetes(1):Kubernetes 入门基础

    目录 Kubernetes 入门基础 Introduction basic of kubernetes What Is Kubernetes? Components of Kubernetes Kub ...

  7. 浅入kubernetes(2):Kubernetes 的组成

    目录 说明 Kubernetes集群的组成 What are containerized applications? What are Kubernetes containers? What are ...

  8. 浅入Kubernetes(12):Deployment 的升级、回滚

    目录 更新 上线 会滚 缩放 Deployment 直接设置 Pod 水平自动缩放 比例缩放 暂停 Deployment 上线 本篇内容讨论 Pod 的更新和回滚,内容不多. 更新 打开 https: ...

  9. 包学会之浅入浅出Vue.js:结业篇(转)

    蔡述雄,现腾讯用户体验设计部QQ空间高级UI工程师.智图图片优化系统首席工程师,曾参与<众妙之门>书籍的翻译工作.目前专注前端图片优化与新技术的探研. 在第一篇<包学会之浅入浅出Vu ...

随机推荐

  1. django学习-22.admi管理后台页面的文案展示等相关配置

    目录结果 1.前言 2.完整的操作步骤 2.1.第一步:对[settings.py]里的相关常量的值做如下修改 2.2.第二步:重启django项目[helloworld]的服务 2.3.第三步:重新 ...

  2. C++算法代码——选举学生会

    题目来自:https://www.luogu.com.cn/problem/P1271 题目描述 学校正在选举学生会成员,有 n(n\le 999)n(n≤999) 名候选人,每名候选人编号分别从 1 ...

  3. MySQL命名、设计及使用规范

    本文转载自MySQL命名.设计及使用规范 导语 最近在看MySQL相关的内容,整理如下规范,作为一名刚刚学习MySQL的菜鸟,整理的内容非常的基础,中间可能涉及到有错误的地方,欢迎批评指正,看到有错误 ...

  4. SCSS引入通用SCSS

    新建通用common.scss .empty { margin-top: 100rpx; text-align: center; .empty-img { width: 220rpx; height: ...

  5. matlab load函数用法 实例

    一 语法: load(filename) load(filename,variables) load(filename,'-ascii') load(filename,'-mat') load(fil ...

  6. Kubernetes - Kubelet TLS Bootstrapping

    一.简单说明 写这个的初衷是自己搜索TLS Bootstrapping的时候没有搜到自己想要的东西,因为TLS Bootstrapping经过很多版本之后也发生了一些变化,所以网上很多也是老的内容了. ...

  7. 13. Vue CLI脚手架

    一. Vue CLI 介绍 1. 什么是Vue CLI? Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.Vue CLI 致力于将 Vue 生态中的工具基础标准化.它确保了各种构建工 ...

  8. ES系列(一):编译准备与server启动过程解析

    ES作为强大的和流行的搜索引擎服务组件,为我们提供了方便的和高性能的搜索服务.在实际应用中也是用得比较爽,但如果能够更深入一点.虽然网上有许多的文章已经完整说明,ES是如何如何做到高性能,如何做到高可 ...

  9. 测试工程师Docker进阶

    学习整理来源 B站 狂神说Java https://space.bilibili.com/95256449/ 四.docker镜像 1.镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运 ...

  10. 推荐一个能让谷歌浏览器变暗色的插件(darkreader)

    下载 https://codechina.csdn.net/mirrors/darkreader/darkreader?utm_source=csdn_github_accelerator 安装教程 ...