kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署。

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

- 一台或多台机器,操作系统 CentOS7.x-86_x64
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
- 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
- 禁止swap分区

1.环境准备

在安装ku8s的之前,使用的是阿里云镜像加速,使用的yum源也是阿里云的,配置如下:

[root@k8snode yum.repos.d]# cat /etc/docker/daemon.json
{
"registry-mirrors": [""https://mj9kvemk.mirror.aliyuncs.com"]
}

但是在5.21发现阿里云提示一直在维护,下载过程出现如下错误:

failure: repodata/repomd.xml from AppStream: [Errno 256] No more mirrors to try.
https://mirrors.aliyun.com/centos/7/AppStream/x86_64/os/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
http://mirrors.cloud.aliyuncs.com/centos/7/AppStream/x86_64/os/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error"

提示这些请求地址无法访问,确实发现是无法访问,因此修改使用网易的镜像加速和网易的yum源

{"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
接着执行如下命令
sudo systemctl daemon-reload
sudo systemctl restart docker

接着修改使用网易的yum源

  1. 首先备份/etc/yum.repos.d/CentOS-Base.repo
[root@localhost yum.repos.d]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)

[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

3.运行如下命令生成缓存

[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache

设置kubernetes yum源

注意如果设置了添加阿里云YUM软件源或者是腾讯的 kubernetes yum源,此时可能存在yum makecache失败,报错如下:

https://mirrors.cloud.tencent.com/kubernetes/yum/repos/kubernetes-el7-x86_64/repodata/repomd.xml.asc: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.

注意到,配置的kubernetes.repo

[root@localhost yum.repos.d]# cat kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.cloud.tencent.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.cloud.tencent.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.cloud.tencent.com/kubernetes/yum/doc/rpm-package-key.gpg
  • [] 中括号中的是repository id,唯一,用来标识不同仓库
  • name 仓库名称,自定义
  • baseurl 仓库地址
  • enable 是否启用该仓库,默认为1表示启用
  • gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
  • repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
  • gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了

如果k8s yum 配置成aliyun,则对于可以将kubernetes.repo设置如下:

$ cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
角色定位 IP地址
k8smaster 192.168.0.100
k8snode 192.168.0.102

因为这里是使用kubeadm安装,因此使用两台环境就可以模拟了。

1.master和node主机均关闭防火墙

systemctl stop firewalld     #临时关闭
systemctl disable firewalld  #永久关闭

关于防火墙的原因(nftables后端兼容性问题,产生重复的防火墙规则)

Theiptablestooling can act as a compatibility layer, behaving like iptables but actually configuring nftables. This nftables backend is not compatible with the current kubeadm packages: it causes duplicated firewall rules and breakskube-proxy.

2.master和node主机均关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时

关于selinux的原因(关闭selinux以允许容器访问宿主机的文件系统)

Setting SELinux in permissive mode by runningsetenforce 0andsed ...effectively disables it. This is required to allow containers to access the host filesystem, which is needed by pod networks for example. You have to do this until SELinux support is improved in the kubelet.

3.master和node主机均关闭swap

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

这里之所以要关闭swap分区, swap,这个当内存不足时,linux会自动使用swap,将部分内存数据存放到磁盘中,这个这样会使性能下降,为了性能考虑推荐关掉,可参考github说明

4.根据规划设置主机名

hostnamectl set-hostname k8smaster   //在master主机上执行
hostnamectl set-hostname k8snode     //在node主机上执行

5.在master结点添加hosts

cat >> /etc/hosts << EOF
192.168.0.100 k8smaster
192.168.0.102 k8snode
EOF

6.将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  # 生效

7.时间同步

yum install ntpdate -y
ntpdate time.windows.com

2.安装Docker/kubeadm/kubelet

首先安装wget命令

yum install wget -y
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-3.el7
$ systemctl enable docker && systemctl start docker   //设置开机启动并启动起来
$ docker --version
Docker version 18.06.1-ce, build e68fc7a

//配置镜像加速器

$ cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

或者使用网易的镜像加速

$ cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF

配置镜像加速之后,需要进行如下设置

sudo systemctl daemon-reload
sudo systemctl restart docker

3.1.配置k8s-yum源

配置aliyun-YUM源

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

或者配置

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

注意这里配置的gpgcheck=0,repo_gpgcheck=0,实验发现配置为1会提示404的错误

3.2.安装kubeadm,kubelet和kubectl

$ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0  //两台机器均安装
$ systemctl enable kubelet      //设置开机启动

这里安装如果不指定版本号,则默认使用最新的版本号。之所以这里安装使用非最新的,放置因为最新版本安装出现的问题,因此选择使用一个较为稳定的版本。安装成功之后如下

Dependency Installed:conntrack-tools.x86_64 0:1.4.4-7.el7                 cri-tools.x86_64 0:1.13.0-0                          kubernetes-cni.x86_64 0:0.8.7-0libnetfilter_cthelper.x86_64 0:1.0.0-11.el7          libnetfilter_cttimeout.x86_64 0:1.0.0-7.el7          libnetfilter_queue.x86_64 0:1.0.2-2.el7_2socat.x86_64 0:1.7.3.2-2.el7Complete!

4.部署Kubernetes Master

在Master结点中执行

kubeadm init --apiserver-advertise-address=192.168.0.100     --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

这里的apiserver-advertise-address自然是master结点的ip地址,另外两个地址只要和本地的不一致即可

参数说明

  • --apiserver-advertise-address=192.168.0.100    这个参数就是master主机的IP地址,例如我的Master主机的IP是:192.168.0.100
  • --image-repository=registry.aliyuncs.com/google_containers  这个是镜像地址,由于国外地址无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/google_containers
  • --kubernetes-version=v1.18.0   这个参数是下载的k8s软件版本号
  • --service-cidr=10.96.0.0/12       这个参数后的IP地址直接就套用10.96.0.0/12 ,以后安装时也套用即可,不要更改
  • --pod-network-cidr=10.244.0.0/16       k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16

初始化比较耗时。安装成功后会提示下文如何操作

Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.0.100:6443 --token 38uvba.z8u5cwyxscxmzzij \--discovery-token-ca-cert-hash sha256:f3cf79c32b9026a8999b5b99f5d8a5cc4a080dca16733bd4d70dc936f27cc393

按照上文中提示执行:

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

执行完成后,使用命令查看

[root@k8smaster yum.repos.d]# kubectl get nodes
NAME        STATUS     ROLES    AGE   VERSION
k8smaster   NotReady   master   10m   v1.18.0

展示 k8smaster结点的状态为NotReady

5.加入Kubernetes Node

同样这里也是使用kubeadm命令执行结果中的命令,因为这里提示了下文如何操作,注意这里是在k8snode结点上操作

[root@k8snode ~]# kubeadm join 192.168.0.100:6443 --token 38uvba.z8u5cwyxscxmzzij \
>     --discovery-token-ca-cert-hash sha256:f3cf79c32b9026a8999b5b99f5d8a5cc4a080dca16733bd4d70dc936f27cc393

在node结点配置之后 ,此时在回到master结点上进行查看

centos7下使用kubeadm安装k8s相关推荐

  1. (亲测无坑)Centos7.x使用kubeadm安装K8s集群1.15.0版本

    基础环境配置 三台Centos7.x的服务器,主节点 cpu >=2,node节点>=1 注:(上述cpu为最低配置,否则集群安装部署会报错,无法启动,对其他硬件无硬性要求) 以下操作若无 ...

  2. centos7 下google Kubernetes(k8s)集群安装部署

    centos7 下google Kubernetes(k8s)集群安装部署 简介 安装环境 安装前准备 ECTD集群配置 命令含义: master节点配置 1.安装kubernetes和etcd 2. ...

  3. centos7.6使用kubeadm安装kubernetes的master worker节点笔记及遇到的坑

    个人博客原文地址:http://www.lampnick.com/php/760 本文目标 安装docker及设置docker代理 安装kubeadm 使用kubeadm初始化k8s Master节点 ...

  4. Centos7下 Redis的安装、配置开机自启动、开放远程连接

    一.Centos7下 Redis的安装: 1.下载安装包: wget http://download.redis.io/releases/redis-4.0.2.tar.gz 2.解压安装包并安装: ...

  5. linux防火墙安装httpd配置,CentOS7下 Apache的安装配置方法

    前些天安装了Nginx,为了好玩我就又安装Apache,Apache的安装还算顺利.在此做一下学习记录和经验分享. 一.安装httpd 1.先查看一下系统有没有已经安装了httpd的,如果啥都没查到, ...

  6. 阿里云服务器——centos7下源码安装tomcat9

    阿里云服务器--centos7下源码安装tomcat9 (第一次写文章,俺会努力的) 首先进入src文件夹: cd /usr/local/src 使用wget命令下载tomcat : wget htt ...

  7. 用Kubeadm安装K8s后,kube-flannel-ds一直CrashLoopBackOff

    2019独角兽企业重金招聘Python工程师标准>>> 如果使用Kubeadm安装K8s集群,在安装flannel网络插件后,发现pod: kube-flannel-ds 一直是Cr ...

  8. 第一篇:centos7下svn的安装与卸载

    2019独角兽企业重金招聘Python工程师标准>>> 第一篇:centos7下svn的安装与卸载 2017年11月29日 00:10:53 独家记忆ly 阅读数:6108 这是我的 ...

  9. Centos7 下nexus的安装和使用

    文章目录 Centos7 下nexus的安装和使用 1.安装JDK 1.1查看当前linux是否安装java 1.2 上传jdk到linux文件目录 1.3 配置环境变量 (1)修改/etc/prof ...

最新文章

  1. 清华大学计算机系网络教学视频31门计算机课程
  2. python_ re模块学习
  3. web服务器测试web bench
  4. C语音的预处理,编译,汇编,链接过程分析
  5. xshell可以连接上linux,但是xftp却连不上问题
  6. 「javaScript-每三位插入一个逗号实现方式」
  7. 卷积神经网络-进化史 | 从LeNet到AlexNet
  8. java怎么判断素数_java判断素数(质素)
  9. 基于SSH的宠物管理系统
  10. Linux下如何安装jdk
  11. PCB设计流程图 思路清晰远比卖力苦干重要
  12. 一招解决origin8 licience过期
  13. Redis中的Scan命令的使用
  14. 一级建造师-通信-光电缆检验
  15. IDEA 中如何完成 Git 版本回退?
  16. flink实战--核心概念解析和应用
  17. ubuntu IPV6及作为路由分配【笔记】
  18. 2019云计算机峰会,计算机学院师生参加“2019华为云城市峰会”
  19. word2vec中计算两个词的距离或者相似程度。
  20. ASK调制的matlab代码

热门文章

  1. Java中Connection方法笔记
  2. CentOS7使用阿里云镜像安装Mongodb
  3. 关于VC单选按钮不能设置变量以及Group属性的设置问题
  4. (数据挖掘 —— 无监督学习(聚类)
  5. 第四章-数据共享与保护
  6. java回文数算法for_【Java】【每日算法/刷穿 LeetCode】9. 回文数(简单)
  7. Python:win32com 模块
  8. AIC-赤池信息准则、BIC-贝叶斯信息准则
  9. Linux 系统运维 文件操作命令
  10. 跨链Cosmos(3)IBC协议二