kubernetes部署

1、kubernetes安装介绍

1.1、K8s架构图

请添加图片描述

1.2 K8s搭建安装示意图

请添加图片描述

1.3安装kubernetes方法

方法1:使用kubeadm 安装kubernetes(本文演示的就是此方法)
  • 优点:你只要安装kubeadm即可;kubeadm会帮你自动部署安装K8S集群;如:初始化K8S集群、配置各个插件的证书认证、部署集群网络等。安装简易。

  • 缺点:不是自己一步一步安装,可能对K8S的理解不会那么深;并且有那一部分有问题,自己不好修正。

方法2:二进制安装部署kubernetes
  • 优点:K8S集群所有东西,都由自己一手安装搭建;清晰明了,更加深刻细节的掌握K8S;哪里出错便于快速查找验证。

  • 缺点:安装较为繁琐麻烦,且易于出错

1.4 测试环境

System Hostname IP
Centos7.6 node1(master) 192.168.9.1
Centos7.6 node2 192.168.9.2
Centos7.6 node3 192.168.9.3

2、安装kubernetes先决条件

2.1 组件版本

  1. docker 17.03.2

  2. kubeadm 1.14.1

  3. kubelet 1.14.1

2.2 集群机器

  1. node1:192.168.9.1

  2. node2:192.168.9.2

  3. node3:192.168.9.3

2.3 主机名

1、设置永久主机名称,然后重新登录

(在master节点执行)

sudo hostnamectl set-hostname node1

(在node1节点执行)

sudo hostnamectl set-hostname node2

(在node2节点执行)

sudo hostnamectl set-hostname node3

2、修改 /etc/hostname 文件,添加主机名和 IP 的对应关系:

vim /etc/hosts
  • 192.168.9.1 node1

  • 192.168.9.2 node2

  • 192.168.9.3 node3

2.4 同步系统时间

yum -y install ntpdate sudo ntpdate cn.pool.ntp.org  

2.5 关闭防火墙

在每台机器上关闭防火墙:

1.关闭服务,并设为开机不自启
sudo systemctl stop firewalld sudo systemctl disable firewalld
2.清空防火墙规则
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.2 配置安装源

📌以下操作在3个服务器上,都要执行!

3.2.1 配置docker-ce 源信息

(1)添加docker-ce 源信息

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 源

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仓库
cd /etc/yum.repos.d/ [root@node1 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仓库
yum clean all
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)安装

下载稳定版本17.03.2

[root@node1 ~] yum -y install docker-ce-17.03.2.ce 
[root@node1 ~] yum -y install kubeadm-1.14.1 kubelet-1.14.1 kubectl-1.14.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@node1 ~] 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@node1 ~] yum -y install docker-ce-17.03.2.ce

3.4 启动服务

3.4.1 配置启动docker服务

添加加速器到配置文件

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF

启动服务

systemctl daemon-reload 
systemctl start docker 
systemctl enable docker.service

打开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

创建文件

/etc/sysctl.d/k8s.conf

#添加如下内容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

使修改生效,执行

sudo sysctl -p /etc/sysctl.d/k8s.conf

可能遇到问题—-is an unknown key

报错

error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key

解决方法

sudo modprobe bridge
sudo lsmod |grep bridge
sudo sysctl -p /etc/sysctl.d/k8s.conf

可能遇到问题—sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有那个文件或目录

报错

[root@localhost ~]# sysctl -p /etc/sysctl.d/k8s.conf
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有那个文件或目录
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: 没有那个文件或目录

解决方法

modprobe br_netfilter
ls /proc/sys/net/bridge
sudo sysctl -p /etc/sysctl.d/k8s.conf
3.4.2 配置启动kubelet服务

(1)修改配置文件

vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false"
KUBE_PROXY=MODE=ipvs

(2)先设为开机自启

systemctl enable kubelet.service

因为K8S集群还未初始化,所以kubelet 服务启动不成功,下面初始化完成,再启动即可。

4、初始化kubernetes master节点

在master服务器上执行,完成以下所有操作

4.1 使用kubeadm init初始化

(1)使用kubeadm init 进行初始化(需要进行很多操作,所以要等待一段时间)
[root@master ~]kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap/all

解释:

  • –kubernetes-version:指定kubeadm版本;

  • –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 忽略所有报错即可。

初始化错误:

the number of available CPUs 1 is less than the required 2

📌解决:设置虚拟机CPU核心数>1个即可
在这里插入图片描述

(2)需要的镜像
k8s.gcr.io/kube-proxy:v1.14.1
k8s.gcr.io/kube-scheduler:v1.14.1
k8s.gcr.io/kube-controller-manager:v1.14.1
k8s.gcr.io/kube-apiserver:v1.14.1
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
quay.io/coreos/flannel:v0.11.0
(3)下载镜像(多个节点都要拉取镜像)
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1
docker pull registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64

(4) 更改镜像标签
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1 k8s.gcr.io/kube-proxy:v1.14.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.1 k8s.gcr.io/kube-scheduler:v1.14.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.1 k8s.gcr.io/kube-controller-manager:v1.14.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker tag registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.11.0
(5) 删除不必要的镜像
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.14.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.14.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.14.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.14.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1
docker rmi registry.cn-shenzhen.aliyuncs.com/cp_m/flannel:v0.10.0-amd64
(6)下载好镜像后,再次初始化。能够科学上网的话不用重试
kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap/all

提示:成功之后要保存成功的信息,以下的key增加节点要用到

kubeadm join 192.168.9.1:6443 --token ni4jhs.jpn583csv2q0rn97 \
    --discovery-token-ca-cert-hash sha256:74cae31813616697474fd8f07c52d62af7e2bddb03937fc2d4b7be99b9ef1127 

若初始化失败,查看镜像是否下载完成。重新初始化

重启kubelet

systemctl enable kubelet && systemctl start kubelet

重新初始化

kubeadm reset 
kubeadm init --kubernetes-version=v1.14.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap/all

(7) 初始化命令成功后,创建.kube目录
[root@master ~] mkdir -p $HOME/.kube
[root@master ~] cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

4.2 验证

(1)拉取了必须的镜像
docker images

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2pt83QXc-1667184249979)(image/image_U-_-Qr-Q0Y.png)]

开启了kube-apiserver 的6443端口

[root@master ~] ss -nutlp
(2)使用kubectl命令查询集群信息

查询组件状态信息

kubectl get cs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D171x1mK-1667184442681)(https://secure2.wostatic.cn/static/9M8gzu3pmiEp5hkb9S7YMC/image.png?auth_key=1667184101-b8Cb6jieVFoEBqrcNTEc9J-0-464a212c2c169d2846815dba7c3e23c0)]

查询名称空间,默认

kubectl get ns

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PzNHuixV-1667184249981)(image/image_oloWeMiNpF.png)]

4.3 部署网络插件flannel

(1) 直接使用kubectl 执行gitlab上的flannel 部署文件

注释:网络超时可以多尝试几次

[root@master ~] kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
(2) 会看到下载好的flannel 的镜像
docker image ls |grep flannel

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-63lThGzY-1667184249982)(image/image_qvdL5gW5Vm.png)]

(3) 验证

① master 节点已经Ready

kubectl get nodes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6xZUbsOb-1667184249983)(image/image_ovsbenhpCt.png)]

若出现STATUS为notReady的状态,可能是由于镜像没有加载完成,等待一段时间即可

使用命令检查pod是否是running状态(要全部为running)

kubectl get pod --all-namespaces -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F3yz86d9-1667184249984)(image/image_csvSitTy-D.png)]

② 查询kube-system名称空间下

kubectl get pods -n kube-system -o wide |grep flannel

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-woHmgt5w-1667184249985)(image/image_2J2AYy6E0p.png)]

5、初始化kubernetes node节点

在两个node 服务器上执行,完成以下所有操作

5.1 使用kubeadm join 初始化

(1)初始化node节点;下边的命令是master初始化完成后,下边有提示的操作命
kubeadm join 192.168.9.1:6443 --token ni4jhs.jpn583csv2q0rn97 \
    --discovery-token-ca-cert-hash sha256:74cae31813616697474fd8f07c52d62af7e2bddb03937fc2d4b7be99b9ef1127 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evpK74ku-1667184249986)(image/image__O-4AQlhp_.png)]

5.2 验证集群是否初始化成功(同样要等待)

kubectl get nodes

(等2个从节点上下载好镜像,初始化完成,再在主上查询验证)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N67CLtPG-1667184249988)(image/image_nYS5-FWTtt.png)]

至此,kubernetes集群已经搭建安装完成。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐