阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

kubeadm部署kubernetes集群

514次阅读
没有评论

共计 6126 个字符,预计需要花费 16 分钟才能阅读完成。

部署环境

本文中未加明显说明,将在所有机器上操作
系统环境: CetntOS 7
Docker 版本:ce-v18.09.5
kubeneter 版本: v1.14.1

IP 地址 主机名 担任角色
192.168.1.21 k8s-master master
192.168.1.22 k8s-node01 node
192.168.1.23 k8s-node02 node

安装前准备

1、关闭所有机器的防火墙

$ systemctl stop firewalld 
$ systemctl disable firewalld
$ iptables -F

2、关闭所有服务器 selinux

$ setenforce 0
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

3、关闭所有服务器的交换分区(swap)

$ swapoff -a
$ sed -ri 's/.*swap.*/#&/' /etc/fstab

4、添加主机 hosts 记录

$ vim /etc/hosts
192.168.1.21  k8s-master
192.168.1.22  k8s-node01
192.168.1.23  k8s-node02

5、其他

$ echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

部署 Docker 环境

所有节点都安装

1、卸载旧的 docker 环境

$ yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-engine

2、安装依赖

$ yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

3、添加 docker yum 源

$ yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/CentOS/docker-ce.repo

4、安装 docker ce

$ yum install docker-ce docker-ce-cli containerd.io

5、添加系统服务并启动

$ systemctl enable docker
$ systemctl start docker

6、添加镜像加速器

使用 Daocloud 提供的镜像加速服务

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
$ systemctl restart docker

7、验证 docker

$ docker run --rm hello-world

部署 k8s 环境

1、安装组件(kubelet、kubeadm、kubectl)

所有节点都需要安装
kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。
kubeadm 用于初始化 Cluster。
kubect I 是 Kubernetes 命令行工具。通过 kubectI 可以部署和管理
应用,查看各种资源,创建、删除和更新各种组件。

a. 添加安装组件 yum 源

如果机器可以 FQ,则可以直接使用一下命令安装

$ 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

推荐安装(使用阿里镜像安装)

$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

b. 安装

$ yum install -y kubelet kubeadm kubectl

2、下载 k8s 所需要的镜像

此处镜像使用阿里云构建的国内镜像源,由于 k8s 版本过高 docker 官网提供的仓库缺少部分指定版本的镜像

镜像映射文件

$ vim images
k8s.gcr.io/kube-apiserver:v1.14.1=registry.cn-beijing.aliyuncs.com/musker/kube-apiserver:v1.14.1
k8s.gcr.io/kube-controller-manager:v1.14.1=registry.cn-beijing.aliyuncs.com/musker/kube-controller-manager:v1.14.1
k8s.gcr.io/kube-scheduler:v1.14.1=registry.cn-beijing.aliyuncs.com/musker/kube-scheduler:v1.14.1
k8s.gcr.io/kube-proxy:v1.14.1=registry.cn-beijing.aliyuncs.com/musker/kube-proxy:v1.14.1
k8s.gcr.io/pause:3.1=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
k8s.gcr.io/etcd:3.3.10=registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1=registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1
quay.io/coreos/flannel:v0.11.0-amd64=registry.cn-beijing.aliyuncs.com/musker/flannel:v0.11.0-amd64

镜像下载脚本

$ vim load_images.sh
#/bin/bash
file="images"
if [-f "$file"]
then
  echo "$file found."
  while IFS='=' read -r key value
  do
    #echo "${key}=${value}"
    docker pull ${value}
    docker tag ${value} ${key}
    docker rmi ${value}
  done < "$file"
else
  echo "$file not found."
fi

下载镜像

$ chmod +x load_images.sh
$ ./load_images.sh

3、初始化 master(master 节点执行)

$ kubeadm init --apiserver-advertise-address=192.168.1.21 --pod-network-cidr=10.224.0.0/16

参数解释:--apiserver-advertise-address
    指定 master 的那个 interface 与 cluster 的其他节点通信,如果 master 有多个 interface,建议明确指定,如果不指定,kubeadm 回自动选择有默认网关的 interface
    --pod-network-cidr
    指定 pod 网络的范围。kubernetes 支持多种网络方案,而且不网络方案对此参数有自己的要求,这里设置 10.224.0.0/16 是因为本文将使用 flannel 网络方案,必须设置成这个 CIDR。

kubeadm 初始化过程:

(1) kubeadm 执行初始化前的检查

(2) 生成 token 和证书。

(3) 生成 Kube Config 文件,kubelet 需要用这个文件与 Master 通信。

(4) 安装 Master 组件,会从 Google 的 Registry 下载组件的 Docker 镜像。这一步可能会花一些时间,主要取决于网络质量(本文中提前下载好了镜像,所以此步骤很快)。

(5) 安装附加组件 kube-proxy 和 kube-dns。

(6) Kubernetes Master 初始化成功。

(7) 提示如何配置 kubectl。

(8) 提示如何安装 Pod 网络。

(9) 提示如何注册其他节点到 Cluster。

4、配置 kubectl(master 节点执行)

这里创建一个 k8s 的普通用户来执行 kubectl 命令(root 会有一些问题)

$ useradd k8s
$ passwd k8s
$ mkdir -p /home/k8s/.kube
$ cp -i /etc/kubernetes/admin.conf /home/k8s/.kube/config
$ chown k8s:k8s /home/k8s/.kube/config

添加命令行提示

$ yum -y install bash-completion
$ echo "source < (kubectl completion bash)" >> ~/.bashrc

现在可以使用 tab 键快速补全命令

5、安装 pod 网络(master 节点执行)

支持 kubernetes cluster 之间 pod 网络通信,kubernetes 支持多种网络,本文使用 flannel 网络。

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

6、将 node 节点添加到 kubernetes 集群(node 节点执行)

$ kubeadm join --token 172awr.uqxymof1vveznmtr 192.168.1.21:6443

如果出现以下错误,说明需要进行 ca 校验可以使用 –discovery-token-unsafe-skip-ca-verification 参数忽略校验

discovery.bootstrapToken: Invalid value: "": using token-based discovery without caCertHashes can be unsafe. Set unsafeSkipCAVerification to continue

这里指定的 –token 来自前面 kubeadm init 执行后输出的信息。如果没有记录可以通过 kubeadm token list 进行查看。最后一个参数是指定 master 节点的 ip 和 k8s api(https)端口

$ kubeadm token list
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
172awr.uqxymof1vveznmtr   8h        2019-05-07T18:22:38+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

7、验证集群状态(master 节点执行)

查看各个节点的状态

$ kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   Ready      master   15h   v1.14.1
k8s-node01   NotReady   <none>   22m   v1.14.1
k8s-node02   NotReady   <none>   22m   v1.14.1

如果发现节点状态为 NotReady,这是因为每个节点都需要启动若干个组件,这些组件都是在 Pod 中运行,需要首先从 google 下载镜像。可以通过以下命令查看 Pod 状态

$ kubectl get pod --all-namespaces

Pending、Container Creating、Image Pullbackoff 都表明 Pod 没有就绪,Running オ是就绪状态。我们可以通过 kubectl describe pod <Pod Name> 查看 Pod 的具体情况

$ kubectl describe pod  kube-flannel-ds-amd64-7kjsk --namespace=kube-system

等待一段时间,Image 成功下载后,所有 Pod 都会处于 Running 状态。如果镜像下载失败,我们需要手动的去 docker pull 镜像(参考本节第二部分)。

再通过 kubectl get nodes 命令查看节点状态,所有节点均处于 Ready 状态表示 kubernetes cluster 集群创建成功。

$ kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   15h   v1.14.1
k8s-node01   Ready    <none>   33m   v1.14.1
k8s-node02   Ready    <none>   33m   v1.14.1

8、创建 pod 验证集群可用性

a. 创建 nginx pod 容器

$ kubectl run nginx-deployment --image=nginx:1.16.0 --port=80 --replicas=3

b. 查看 pod 状态

$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6dcd798fd8-77s9l   1/1     Running   0          99s
nginx-deployment-6dcd798fd8-g5v2c   1/1     Running   0          99s
nginx-deployment-6dcd798fd8-qc64z   1/1     Running   0          99s

c. 暴露 nginx 外部访问端口

$ kubectl expose deployment/nginx-deployment --type="NodePort" --port 80
$ kubectl get service
NAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
nginx-deployment   NodePort    10.105.86.75   <none>        80:30939/TCP   9s

d. 访问验证

$ curl -I http://127.0.0.1:30939

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6126字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7976415
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...