kubernetes系列03—kubeadm安装部署K8S集群
本文收录在容器技术学习系列文章总目录
1、kubernetes安装介绍
1.1 K8S架构图
1.2 K8S搭建安装示意图
1.3 安装kubernetes方法
1.3.1 方法1:使用kubeadm 安装kubernetes(本文演示的就是此方法)
- 优点:你只要安装kubeadm即可;kubeadm会帮你自动部署安装K8S集群;如:初始化K8S集群、配置各个插件的证书认证、部署集群网络等。安装简易。
- 缺点:不是自己一步一步安装,可能对K8S的理解不会那么深;并且有那一部分有问题,自己不好修正。
1.3.2 方法2:二进制安装部署kubernetes(详见下篇kubernetes系列04—二进制安装部署kubernetes集群)
- 优点:K8S集群所有东西,都由自己一手安装搭建;清晰明了,更加深刻细节的掌握K8S;哪里出错便于快速查找验证。
- 缺点:安装较为繁琐麻烦,且易于出错。
2、安装kubernetes先决条件
2.1 组件版本
- docker 17.03.2
- kubeadm 1.11.1
- kubelet 1.11.1
- kubectl 1.11.1
2.2 集群机器
- kube-master:192.168.10.103
- kube-node1:192.168.10.104
- kube-node2:192.168.10.105
2.3 主机名
1、设置永久主机名称,然后重新登录
$ sudo hostnamectl set-hostname master
$ sudo hostnamectl set-hostname node1
$ sudo hostnamectl set-hostname node2
2、修改 /etc/hostname 文件,添加主机名和 IP 的对应关系:
$ vim /etc/hosts
192.168.10.103 master
192.168.10.104 node1
192.168.10.105 node2
2.4 同步系统时间
$ yum -y install ntpdate
$ sudo ntpdate cn.pool.ntp.org
2.5 关闭防火墙
在每台机器上关闭防火墙:
① 关闭服务,并设为开机不自启
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
② 清空防火墙规则
$ sudo iptables -F && sudo iptables -X && sudo iptables -F -t nat && sudo iptables -X -t nat
$ sudo iptables -P FORWARD ACCEPT
2.6 关闭 swap 分区
1、如果开启了 swap 分区,kubelet 会启动失败(可以通过将参数 --fail-swap-on 设置为false 来忽略 swap on),故需要在每台机器上关闭 swap 分区:
$ sudo swapoff -a
2、为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目:
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.7 关闭 SELinux
1、关闭 SELinux,否则后续 K8S 挂载目录时可能报错 Permission denied :
$ sudo setenforce 0
2、修改配置文件,永久生效;
$ vim /etc/selinux/config
SELINUX=disabled
3、使用kubeadm安装K8S集群
3.1 认识kubeadm
- gitlab项目地址:https://github.com/kubernetes/kubeadm
- kubeadm 幕后发生的工作内容:https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md
以下操作在3个服务器上,都要执行!
3.2 配置安装源
3.2.1 配置docker-ce 源信息
(1)添加docker-ce 源信息
[root@master ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
(2)修改docker-ce 源
[root@master ~]# sed -i 's@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo
3.2.2 配置kubernetes仓库
[root@node2 ~]# cd /etc/yum.repos.d/
[root@master yum.repos.d]# vim kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable=1
3.2.3 更新yum仓库
[root@master yum.repos.d]# yum clean all
[root@master yum.repos.d]# yum repolist
repo id repo name status
base base 9,363
docker-ce-stable/x86_64 Docker CE Stable - x86_64 20
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,663
kubernetes Kubernetes Repo 246
repolist: 22,292
3.3 安装docker、kubelet、kubeadm、kubectl
- kubelet:负责管理pods和它们上面的容器,维护容器的生命周期
- kubeadm:安装K8S工具
- kubectl:K8S命令行工具
(1)安装
[root@master ~]# yum -y install docker-ce-17.03.2.ce 下载稳定版本17.03.2
[root@master ~]# yum -y install kubeadm-1.11.1 kubelet-1.11.1 kubectl-1.11.1
(2)安装docker报错(虚拟机中可能会遇到,如果没有报错请忽略)
Error: Package: docker-ce-18.03.1.ce-1.el7.centos.x86_64 (docker-ce-stable)
Requires: container-selinux >= 2.9
报错原因: docker-ce-selinux 版本过低
解决办法:在https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/网站下载对应版本的docker-ce-selinux,安装即可
[root@master ~]# yum -y install https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
再次安装docker 成功:
[root@master ~]# yum -y install docker-ce-17.03.2.ce
3.4 启动服务
3.4.1 配置启动docker服务
(1)添加加速器到配置文件
[root@master ~]# mkdir -p /etc/docker
[root@master ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
(2)启动服务
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl start docker
[root@master ~]# systemctl enable docker.service
(3)打开iptables内生的桥接相关功能,已经默认开启了,没开启的自行开启
[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@node1 ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
3.4.2 配置启动kubelet服务
(1)修改配置文件
[root@master ~]# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
KUBE_PROXY=MODE=ipvs
(2)先设为开机自启
[root@master ~]# systemctl enable kubelet.service
因为K8S集群还未初始化,所以kubelet 服务启动不成功,下面初始化完成,再启动即可。
4、初始化kubernetes master节点
在master服务器上执行,完成以下所有操作
4.1 使用kubeadm init初始化
(1)使用kubeadm init 进行初始化(需要进行很多操作,所以要等待一段时间)
[root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
释:
- --kubernetes-version:指定kubeadm版本;我这里下载的时候kubeadm最高时1.11.1版本
- --pod-network-cidr:指定pod所属网络
- --service-cidr:指定service网段
- --ignore-preflight-errors=Swap/all:忽略 swap/所有 报错
注:
因为kubeadm需要拉取必要的镜像,这些镜像需要“科学上网”;所以可以先在docker hub或其他镜像仓库拉取kube-proxy、kube-scheduler、kube-apiserver、kube-controller-manager、etcd、pause镜像;并加上 --ignore-preflight-errors=all 忽略所有报错即可。
(2)下载镜像
我已经将我下载的镜像导出,放入我的网盘,有需要的打赏一杯咖啡钱,私聊博主;博主会很快恢复的;
[root@master ~]# docker image load -i kube-apiserver-amd64.tar.gz
[root@master ~]# docker image load -i kube-proxy-amd64.tar.gz
[root@master ~]# docker image load -i kube-controller-manager-amd64.tar.gz
[root@master ~]# docker image load -i kube-scheduler-amd64.tar.gz
[root@master ~]# docker image load -i etcd-amd64.tar.gz
[root@master ~]# docker image load -i pause.tar.gz
(3)初始化命令成功后,创建.kube目录
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
4.2 验证
(1)拉取了必须的镜像
[root@master ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy-amd64 v1.11.1 d5c25579d0ff 6 months ago 97.8 MB
k8s.gcr.io/kube-scheduler-amd64 v1.11.1 272b3a60cd68 6 months ago 56.8 MB
k8s.gcr.io/kube-apiserver-amd64 v1.11.1 816332bd9d11 6 months ago 187 MB
k8s.gcr.io/kube-controller-manager-amd64 v1.11.1 52096ee87d0e 6 months ago 155 MB
k8s.gcr.io/etcd-amd64 3.2.18 b8df3b177be2 9 months ago 219 MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 13 months ago 742 kB
(2)开启了kube-apiserver 的6443端口
[root@master ~]# ss -nutlp
tcp LISTEN 0 128 :::6443 :::* users:(("kube-apiserver",pid=1609,fd=3))
(3)使用kubectl命令查询集群信息
查询组件状态信息
[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
查询集群节点信息(因为还没有部署好flannel,所以节点显示为NotReady)
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 13m v1.11.1
查询名称空间,默认
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 13m
kube-public Active 13m
kube-system Active 13m
4.3 部署网络插件flannel
(1)直接使用kubectl 执行gitlab上的flannel 部署文件
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created
(2)会看到下载好的flannel 的镜像
[root@master ~]# docker image ls |grep flannel
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 12 months ago 44.6 MB
quay.io/coreos/flannel v0.9.1 2b736d06ca4c 14 months ago 51.3 MB
(3)验证
① master 节点已经Ready
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 14m v1.11.1
② 查询kube-system名称空间下
[root@master ~]# kubectl get pods -n kube-system(指定名称空间) |grep flannel
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-amd64-4wck2 1/1 Running 0 1m
5、初始化kubernetes node节点
在2个node 服务器上执行,完成以下所有操作
5.1 使用kubeadm join 初始化
(1)初始化node节点;下边的命令是master初始化完成后,下边有提示的操作命令
[root@node1 ~]# kubeadm join 192.168.10.103:6443 --token t56pjr.cm898tj09xm9pkqz --discovery-token-ca-cert-hash sha256:3ffe1c840e8a4b334fc2cc3d976b0e3635410e52e3653bb39585b8b557f81bc4 --ignore-preflight-errors=Swap
(2)从节点如果不能“科学上网”,只需从本地上传2个镜像即可;还是我网盘中的镜像
[root@node1 ~]# docker image load -i kube-proxy-amd64.tar.gz
[root@node1 ~]# docker image load -i pause.tar.gz
5.2 验证集群是否初始化成功
(1)查询2个节点的镜像
[root@node1 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy-amd64 v1.11.1 d5c25579d0ff 6 weeks ago 97.8 MB
quay.io/coreos/flannel v0.10.0-amd64 f0fad859c909 7 months ago 44.6 MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 8 months ago 742 kB
(2)等2个从节点上下载好镜像,初始化完成,再在主上查询验证
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 28m v1.11.1
node1 Ready <none> 7m v1.11.1
node2 Ready <none> 2m v1.11.1
(3)在主节点查询kube-system名称空间下关于node节点pod的信息
[root@master ~]# kubectl get pods -n kube-system -o wide |grep node
kube-flannel-ds-amd64-fcm9x 1/1 Running 15 91d 192.168.130.105 node2
kube-flannel-ds-amd64-hzkp7 1/1 Running 17 91d 192.168.130.104 node1
kube-proxy-f2kkn 1/1 Running 34 139d 192.168.130.104 node1
kube-proxy-kkqln 1/1 Running 35 139d 192.168.130.105 node2
至此,kubernetes集群已经搭建安装完成;kubeadm帮助我们在后台完成了所有操作;想要自己全部手动搭建kubernetes集群;详解下篇二进制安装部署kubernetes集群---超详细教程
kubernetes系列03—kubeadm安装部署K8S集群的更多相关文章
- centos7.8 安装部署 k8s 集群
centos7.8 安装部署 k8s 集群 目录 centos7.8 安装部署 k8s 集群 环境说明 Docker 安装 k8s 安装准备工作 Master 节点安装 k8s 版本查看 安装 kub ...
- 通过kubeadm工具部署k8s集群
1.概述 kubeadm是一工具箱,通过kubeadm工具,可以快速的创建一个最小的.可用的,并且符合最佳实践的k8s集群. 本文档介绍如何通过kubeadm工具快速部署一个k8s集群. 2.主机规划 ...
- Kubeadm安装的K8S集群1年证书过期问题的解决思路
这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...
- 通过kubeadm快速部署K8S集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm i ...
- 【02】Kubernets:使用 kubeadm 部署 K8S 集群
写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...
- 使用kubeadm部署k8s集群[v1.18.0]
使用kubeadm部署k8s集群 环境 IP地址 主机名 节点 10.0.0.63 k8s-master1 master1 10.0.0.63 k8s-master2 master2 10.0.0.6 ...
- Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复
目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...
- 菜鸟系列k8s——快速部署k8s集群
快速部署k8s集群 1. 安装Rancher Rancher是业界唯一完全开源的企业级容器管理平台,为企业用户提供在生产环境中落地使用容器所需的一切功能与组件. Rancher2.0基于Kuberne ...
- 部署K8S集群
1.Kubernetes 1.1.概念 kubernetes(通常称为k8s)用于自动部署.扩展和管理容器化应用程序的开源系统.它旨在提供“跨主机集群的自动部署.扩展以及运行应用程序容器的平台”.支持 ...
随机推荐
- (lua) 基于cocos 的插入光效
具体的表现是:移动滚动容器到头部, 新增icon淡入并掉入格子,显示格子中的图标,icon放大并淡出 function UISkyResource:playActivedEffect(id) then ...
- Unity-修改Debug日志文本颜色
Unity开发过程中Debug信息是非常重要的,但是千篇一律的白色字符不能迅速找出想要的信息,添加些字体颜色是个很好的办法,比如: AppDebug.Log("<color=#ff84 ...
- Flume+Kafka+Storm+Hbase+HDSF+Poi整合
Flume+Kafka+Storm+Hbase+HDSF+Poi整合 需求: 针对一个网站,我们需要根据用户的行为记录日志信息,分析对我们有用的数据. 举例:这个网站www.hongten.com(当 ...
- NOIP-比例简化
题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为 1498:902 . ...
- Java-IO 字节流的使用和效率比较
打算做一个系列,前面讲了基本的字符流的用法,这篇博客介绍一下字节流的基本用法: 一.基本使用: 基本字节流: FileInputStream FileOutputStream BufferedIn ...
- HTML入门10
目前,掌握了图像,视频和音频的嵌入,下面来谈iframe和embed.object嵌入网页, 嵌入简史,刚开始流行用嵌入框架然后不同部分显示i不同内容,可以解决下载速度慢时的问题: 慢慢的插件技术流行 ...
- 使用getline输入一行字符串
给定10个国家名,按字母顺序输出,国家名中可以包含空格,国家名用换行隔开 #include<algorithm> #include<iostream> #include< ...
- [LeetCode] Advantage Shuffle 优势洗牌
Given two arrays A and B of equal size, the advantage of A with respect to B is the number of indice ...
- 1、了解计算机与操作系统发展阶段 2、选择一个具体的操作系统,结合计算机与操作系统的发展阶段,详细了解其渊源、发展过程、趋势,整理成简洁美观的图文博客发布。 Windows Mac os x Unix Linux Android 等。
1.了解计算机与操作系统发展阶段 操作系统并不是与计算机硬件一起诞生的,它是在人们使用计算机的过程中,为了满足两大需求:提高资源利用率.增强计算机系统性能,伴随着计算机技术本身及其应用的日益发展,而逐 ...
- 暴力求解Calculator:The Game
本文详实的记录的我的思考过程,类似流水账.... 目前已经烂尾,我对付不了133关后面的关卡 这个手机游戏挺不错的,就是有点难,所以要写程序,暴力的通关. 游戏名字:Calculator:The Ga ...