kubernetes部署

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 测试环境

SystemHostnameIP
Centos7.6node1(master)192.168.9.1
Centos7.6node2192.168.9.2
Centos7.6node3192.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集群已经搭建安装完成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雄是个程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值