目录

1、组件介绍:

(1)Master组件:

① Etcd:

② API server:

③ Controller Manager:

④ Scheduler:

(2)Node组件:

① Kubelet:

② Proxy:

2、修改主机名称:

3、修改hosts配置文件:

4、关闭selinux:

5、关闭防火墙:

6、关闭swap:

7、设置iptables网桥:

8、软件k8s/docker/dashboard版本:

9、安装docker环境:

(1)在线安装docker:

① 卸载旧版本docker:

② 安装依赖:

③ 配置存储仓库:

④ 安装docker:

(2)离线rpm安装docker:

① 获取离线包:

② 上传离线包:

③ 执行安装包:

④ 编写docker服务脚本:

⑤ 上传服务脚本及授权:

⑥ 重新加载系统服务:

(3)操作docker服务:

① 开机自启docker服务:

② 启动docker服务:

(4)修改docker的Cgroup Driver:

(5)重新启动docker:

10、安装kubeadm/kubelet/kubectl:

(1)简介:

(2)官网安装教程:

(3)在线安装:

① 添加阿里云YUM的软件源:

② 安装安装kubeadm/kubelet/kubectl:

(4)离线安装:

① 安装crictl:

② 获取kubeadm/kubelet/kubectl离线包:

③ 上传kubeadm/kubelet/kubectl离线包:

④ 执行安装包:

⑤ 编写kubelet服务脚本:

⑥ 上传服务脚本及授权:

⑦ 重新加载系统服务:

(5)操作kubelet服务:

① 开启自启kubelet服务:

11、软件k8s所需的镜像和软件版本:

12、部署k8s:

(1)在线安装:

(2)离线安装:

① 下载k8s镜像:

② 导出镜像:

③ 导入镜像:

④ 检查镜像列表:

⑤ 部署master节点:

⑥ 查看部署结果:

(3)生成kubelet环境配置文件:

(4)删除主机上train:

13、安装pod网络插件(CNI):

(1)下载flannel的yml配置文件:

(2)上传yml配置文件:

(3)拉取flannel镜像:

(4)重命名flannel镜像:

(5)删除旧flannel镜像:

(6)生效yml配置文件:

14、测试验证k8s:

(1)拉取nginx镜像:

(2)创建nginx容器:

(3)暴露对外端口:

(4)查询nginx是否运行成功:

(5)浏览器测试访问:

(6)扩展nginx副本:

(7)查看pod:


1、组件介绍:

(1)Master组件:

① Etcd:

etcd是一个数据库,它的目标是构建一个高可用的分布式键值数据库,它是基于GO语言实现。在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。在K8s中用于持久化存储集群中所有的资源对象,如Node、Service、Pod、RC、Namespace等;

② API server:

API Server提供了操作etcd的封装接口API,这些API基本上都是集群中资源对象的增删改查及监听资源变化的接口。它提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,通过对相关的资源数据“全量查询”+“变化监听”,这些组件可以很“实时”地完成相关的业务功能。

③ Controller Manager:

集群内部的管理控制中心,其主要目的是实现Kubernetes集群的故障检测和恢复的自动化工作,比如根据RC的定义完成Pod的复制或移除,以确保Pod实例数符合RC副本的定义;根据Service与Pod的管理关系,完成服务的Endpoints对象的创建和更新;其他诸如Node的发现、管理和状态监控、死亡容器所占磁盘空间及本地缓存的镜像文件的清理等工作也是由Controller Manager完成的。

④ Scheduler:

集群中的调度器,负责Pod在集群节点中的调度分配。

(2)Node组件:

① Kubelet:

负责本Node节点上的Pod的创建、修改、监控、删除等全生命周期管理,同时Kubelet定时“上报”本Node的状态信息到API Server里。

② Proxy:

实现了Service的代理与软件模式的负载均衡器

2、修改主机名称:

修改/etc/hostname文件,修改对应的名称为主机名称。

然后重新启动服务器。

3、修改hosts配置文件:

修改/etc/hosts文件添加主机名与IP映射关系:

4、关闭selinux:

集群中所有服务器,修改/etc/selinux/config文件中SELINUX=的值为:disabled,然后重新启动服务器:

5、关闭防火墙:

执行以下命令:

关闭防火墙:

systemctl stop firewalld.service

关闭防火墙自启:

systemctl disable firewalld.service

6、关闭swap:

编辑/etc/fstab配置文件,将包含swap的行使用#进行注释,然后保存配置文件。最后重新启动服务器。

7、设置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

8、软件k8s/docker/dashboard版本:

软件k8s、docker、dashboard在版本上有一定的兼容关系:

K8s版本

Docker版本

Dashboard版本

V1.22

兼容最新到V20.10

暂时没有找到版本

V1.21

兼容最新到V20.10

V2.3.1/V2.3.0

V1.20

有变化暂未懂,应该与V1.17相同

V2.3.1/V2.3.0/V2.2.0/V2.1.0

V1.19

有变化暂未懂,应该与V1.17相同

V2.0.5/V2.0.4

V1.18

咱无明确说明,应该与V1.17相同

V2.0.3/V2.0.2/V2.0.1/V2.0.0

V1.17

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09/V19.03

V2.0.0-rc7/V2.0.0-rc6/V2.0.0-rc5/V2.0.0-rc4

V1.16

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09

V2.0.0-rc3/V2.0.0-rc2/V2.0.0-rc1/

V2.0.0-beta8/V2.0.0-beta7/V2.0.0-beta6/

V2.0.0-beta5

V1.15

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09

V2.0.0-beta4/V2.0.0-beta3/V2.0.0-beta2

V1.14

V1.13.1/V17.03/V17.06/V17.09/

V18.06/V18.09

V2.0.0-beta1

V1.13

V1.11.1/V1.12.1/V1.13.1/

V17.03/V17.06/V17.09/V18.06

暂时没有找到版本

V1.12

V1.11.1/V1.12.1/V1.13.1/

V17.03/V17.06/V17.09/V18.06

暂时没有找到版本

V1.11

V1.11.x/V1.12.x/V1.13.x/V17.03.x

暂时没有找到版本

V1.10

V1.11.x/V1.12.x/V1.13.x/V17.03.x

V1.10.1/V1.10.0

V1.9

V1.11.x/V1.12.x/V1.13.x/V17.03.x

V1.10.1/V1.10.0/V1.8.3

V1.8

V1.11.2/V1.12.6/V1.13.1/V17.03.2

V1.10.1/V1.10.0/V1.8.3

查看k8s与docker版本兼容关系操作步骤:

本次搭建的k8s为1.17.0,对应的docker版本需要1.13.1、17.03、17.06、 17.09、 18.06、18.09。本地安装的docker版本为:18.06.1。

软件k8s的github地址:https://github.com/kubernetes/kubernetes,通过CHANGELOG,点击低版本的log,比如:14、15等,搜索:docker version,可以查看到当前k8s版本兼容的docker版本。

查看k8s与dashboard版本兼容关系操作步骤:

注意查看k8s兼容的dashboard版本。本次搭建的k8s版本为1.17.0,通过查看dashboard官网上不同版本的dashboard软件包能够兼容的对应k8s版本,查找到对应的dashboard版本,本次dashboard版本使用的是v2.0.0-rc7。

官网dashboard地址:https://github.com/kubernetes/dashboard/releases

9、安装docker环境:

(1)在线安装docker:

本地安装的docker版本为:18.06.1。

① 卸载旧版本docker:

执行命令:

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

② 安装依赖:

执行命令:

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

③ 配置存储仓库:

执行命令:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

④ 安装docker:

在线安装的命令为:

yum -y install docker-ce-18.06.1.ce-3.el7

(2)离线rpm安装docker:

在一个有网,并且没安装过docker的服务器上执行yum命令,将需要的相关rpm格式安装包下载到服务器指定文件夹中,以便在无网服务器中安装:

① 获取离线包:

创建rpm软件存储目录:

mkdir -p /wocloud/soft/docker_rpm

安装依赖rpm包:

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

配置存储仓库:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

获取docker的rpm包:

yum -y install docker-ce-18.06.1.ce-3.el7 --downloadonly --downloaddir /wocloud/soft/docker_rpm

其它无网服务器需要安装时,将/wocloud/soft/docker_rpm中的所有rpm文件压缩到一个包中,然后上传到目标服务器,执行下面安装命令即可。

② 上传离线包:

将获取的docker的rpm离线包上传到目标服务器。

③ 执行安装包:

进入到docker的rpm离线包的文件夹中,执行如下安装命令:

执行命令:

rpm -ivh *.rpm --force --nodeps

④ 编写docker服务脚本:

编写docker.service服务文件;

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target



[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s



[Install]

WantedBy=multi-user.target

⑤ 上传服务脚本及授权:

将docker.service文件上传到服务器/etc/systemd/system/中,并授权:

chmod 777 /etc/systemd/system/docker.service

⑥ 重新加载系统服务:

执行命令:

systemctl daemon-reload

(3)操作docker服务:

① 开机自启docker服务:

执行命令:

systemctl enable docker

② 启动docker服务:

执行命令:

systemctl start docker

(4)修改docker的Cgroup Driver:

执行命令:

cat > /etc/docker/daemon.json <<EOF

{

 "exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

(5)重新启动docker:

执行命令:

systemctl daemon-reload

执行命令:

systemctl restart docker.service

10、安装kubeadm/kubelet/kubectl:

(1)简介:

Kubeadm:用来初始化集群的指令。

Kubelet:在集群中的每个节点上用来启动Pod和容器等。

Kubectl:用来与集群通信的命令行工具。

kubeadm不能帮你安装或者管理kubelet或kubectl,所以你需要 确保它们与通过kubeadm安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与kubelet间的相差一个次要版本不一致是支持的,但 kubelet 的版本不可以超过API服务器的版本。 例如,1.7.0版本的kubelet可以完全兼容1.8.0版本的API服务器,反之则不可以。

(2)官网安装教程:

官网安装教程地址:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

(3)在线安装:

① 添加阿里云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

② 安装安装kubeadm/kubelet/kubectl:

执行命令:

yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0

(4)离线安装:

① 安装crictl:

软件crictl是kubeadm/kubelet容器运行时接口(CRI)所需的。

软件下载:下载V1.17.0版本的crictl,与k8s版本一致,下载地址为:https://github.com/kubernetes-sigs/cri-tools/releases

软件上传:将下载的crictl软件包上传到服务器的自定义文件夹中。

软件解压:将crictl软件包进行解压。

文件移动:将crictl软件解压的crictl文件移动到/usr/bin中。

② 获取kubeadm/kubelet/kubectl离线包:

在一个有网,并且没安装过k8s的服务器上执行yum命令,将需要的相关rpm格式安装包下载到服务器指定文件夹中,以便在无网服务器中安装:

添加阿里云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

下载离线安装包:

创建rpm软件存储目录:

mkdir -p /wocloud/soft/kubeadm

执行命令:

yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0 --downloadonly --downloaddir /wocloud/soft/kubeadm

其它无网服务器需要安装时,将/wocloud/soft/kubeadm中的所有rpm文件压缩到一个包中,然后上传到目标服务器,执行下面安装命令即可。

③ 上传kubeadm/kubelet/kubectl离线包:

将获取的kubeadm/kubelet/kubectl离线包上传到目标服务器。

④ 执行安装包:

进入到kubeadm/kubelet/kubectl离线包的文件夹中,执行如下安装命令:

执行命令:

rpm -ivh *.rpm --force --nodeps

⑤ 编写kubelet服务脚本:

编写kubelet.service服务文件;

[Unit]

Description=kubelet: The Kubernetes Node Agent

Documentation=https://kubernetes.io/docs/



[Service]

ExecStart=/usr/bin/kubelet

Restart=always

StartLimitInterval=0

RestartSec=10



[Install]

WantedBy=multi-user.target

⑥ 上传服务脚本及授权:

将kubelet.service文件上传到服务器/etc/systemd/system/中,并授权:

chmod 777 /etc/systemd/system/kubelet.service

⑦ 重新加载系统服务:

执行命令:

systemctl daemon-reload

(5)操作kubelet服务:

① 开启自启kubelet服务:

执行命令:

systemctl enable kubelet

11、软件k8s所需的镜像和软件版本:

通过kubeadm搭建k8s集群所需要的相关镜像和软件,与k8s版本有对应的兼容关系,查看不同版本的k8s所需要的镜像和软件版本如下操作:

软件k8s的github地址:https://github.com/kubernetes/kubernetes,通过CHANGELOG,点击低版本的log,比如:17、18等,搜索:coredns、etcd等关键词,可以查看到当前k8s版本兼容的对应镜像版本。

K8s

版本

Coredns版本

Etcd

版本

api

版本

controller

版本

proxy

版本

scheduler

版本

Pause

版本

Cri-ctl

版本

V1.22

V1.8.4

V3.5.0

V1.22.0

V1.22.0

V1.22.0

V1.22.0

V3.5

V1.21.0

V1.21

V1.8.0

V3.4.13

V1.21.0

V1.21.0

V1.21.0

V1.21.0

V3.4.1

V1.20.0

V1.20

V1.7.0

V3.4.13

V1.20.0

V1.20.0

V1.20.0

V1.20.0

V3.4

V1.19.0

V1.19

V1.7.0

V3.4.9

V1.19.0

V1.19.0

V1.19.0

V1.19.0

V3.2

V1.18.0

V1.18

V1.6.7

V3.4.3

V1.18.0

V1.18.0

V1.18.0

V1.18.0

V3.2

V1.17.0

V1.17

V1.6.5

V3.4.3

V1.17.0

V1.17.0

V1.17.0

V1.17.0

V3.1

V1.17.0

V1.16

V1.6.2

V3.3.15

V1.16.0

V1.16.0

V1.16.0

V1.16.0

——

V1.14.0

V1.15

V1.3.1

V3.3.10

V1.15.0

V1.15.0

V1.15.0

V1.15.0

——

V1.14.0

V1.14

V1.3.1

V3.3.10

V1.14.0

V1.14.0

V1.14.0

V1.14.0

——

——

V1.13

V1.2.6

V3.2.24

V1.13.0

V1.13.0

V1.13.0

V1.13.0

——

——

V1.12

V1.2.2

V3.2.24

V1.12.0

V1.12.0

V1.12.0

V1.12.0

——

——

V1.11

V1.1.3

V3.2.18

V1.11.0

V1.11.0

V1.11.0

V1.11.0

——

——

V1.10

——

V3.1.12

V1.10.0

V1.10.0

V1.10.0

V1.10.0

V3.1

——

V1.9

——

V3.1.10

V1.9.0

V1.9.0

V1.9.0

V1.9.0

——

V1.0.0

V1.8

——

——

V1.8.0

V1.8.0

V1.8.0

V1.8.0

——

V1.0.0

12、部署k8s:

(1)在线安装:

执行命令:

kubeadm init \

--apiserver-advertise-address=192.168.137.129 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.17.0 \

--service-cidr=10.1.0.0/16 \

--pod-network-cidr=10.244.0.0/16 \

--v=5

参数说明:

参数

默认值

参数说明

--apiserver-advertise-address

默认网络接口

API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。

--image-repository

"k8s.gcr.io"

选择用于拉取控制平面镜像的容器仓库。

--kubernetes-version

"stable-1"

为控制平面选择一个特定的 Kubernetes 版本。

--service-cidr

"10.96.0.0/12"

为服务的虚拟 IP 地址另外指定 IP 地址段

--pod-network-cidr

指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。

(2)离线安装:

在有网的服务器上下载k8s所需的相关镜像,将对应的镜像导出到服务器指定文件夹中,以便在无网服务器中能够导入镜像,进行使用:

① 下载k8s镜像:

从国内镜像源下载镜像:

docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.17.0

docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.17.0

docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.17.0

docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.17.0

docker pull registry.aliyuncs.com/google_containers/pause:3.1

docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5

docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0

② 导出镜像:

将修改为官方tag的镜像导入到tar压缩包中,执行命令:

docker save -o kube-proxy-v1.17.0.tar kube-proxy镜像ID registry.aliyuncs.com/google_containers/kube-proxy:v1.17.0

docker save -o kube-apiserver-v1.17.0.tar kube-apiserver镜像ID registry.aliyuncs.com/google_containers/kube-apiserver:v1.17.0

docker save -o kube-controller-manager-v1.17.0.tar kube-controller-manager镜像ID registry.aliyuncs.com/google_containers/kube-controller-manager:v1.17.0

docker save -o kube-scheduler-v1.17.0.tar kube-scheduler镜像ID registry.aliyuncs.com/google_containers/kube-scheduler:v1.17.0

docker save -o pause-3.1.tar pause镜像ID registry.aliyuncs.com/google_containers/pause:3.1

docker save -o coredns-1.6.5.tar coredns镜像ID registry.aliyuncs.com/google_containers/coredns:1.6.5

docker save -o etcd-3.4.3-0.tar etcd镜像ID registry.aliyuncs.com/google_containers/etcd:3.4.3-0

③ 导入镜像:

将上述导出的镜像包tar传输到需要的服务器上,然后通过docker命令将镜像包tar导入到docker本地仓库中,命令示例:

docker image load -i 镜像包tar文件名称

④ 检查镜像列表:

查看docker本地仓库中的镜像列表,执行命令:docker images

⑤ 部署master节点:

执行命令:

kubeadm init \

--apiserver-advertise-address=192.168.137.129 \

--image-repository registry.aliyuncs.com/google_containers \

--kubernetes-version v1.17.0 \

--service-cidr=10.1.0.0/16 \

--pod-network-cidr=10.244.0.0/16 \

--v=5

参数说明:

参数

默认值

参数说明

--apiserver-advertise-address

默认网络接口

API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。

--image-repository

"k8s.gcr.io"

选择用于拉取控制平面镜像的容器仓库。

--kubernetes-version

"stable-1"

为控制平面选择一个特定的 Kubernetes 版本。

--service-cidr

"10.96.0.0/12"

为服务的虚拟 IP 地址另外指定 IP 地址段

--pod-network-cidr

指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。

⑥ 查看部署结果:

出现如下提示信息,表示k8s的master节点部署好了。

(3)生成kubelet环境配置文件:

执行命令:

mkdir -p $HOME/.kube

执行命令:

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

执行命令:

sudo chown $(id -u):$(id -g) $HOME/.kube/config

(4)删除主机上train:

单机版kubernetes为了运行Pod。需要删除主机上的Train。允许master执行Pod。

执行命令:

kubectl taint nodes --all node-role.kubernetes.io/master-

13、安装pod网络插件(CNI):

(1)下载flannel的yml配置文件:

在线flannel的yml文件地址:https://github.com/caoran/kube-flannel.yml/blob/master/kube-flannel.yml,通过该地址将该yml文件下载下来。

(2)上传yml配置文件:

将yml配置文件上传到需要的服务器上。

(3)拉取flannel镜像:

执行命令:

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64

(4)重命名flannel镜像:

执行命令:

docker tag flannel镜像ID quay.io/coreos/flannel:v0.12.0-amd64

(5)删除旧flannel镜像:

执行命令:

docker rmi registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64

(6)生效yml配置文件:

在需要的服务器上,进入到yml配置文件所在的文件夹中,然后执行命令进行生效:kubectl apply -f kube-flannel.yml

14、测试验证k8s:

(1)拉取nginx镜像:

手动拉取以下nginx镜像。执行命令:

docker pull nginx

(2)创建nginx容器:

执行命令:

kubectl create deployment nginx --image=nginx

(3)暴露对外端口:

执行命令:

kubectl expose deployment nginx --port=80 --type=NodePort

(4)查询nginx是否运行成功:

执行命令:

kubectl get pod,svc

(5)浏览器测试访问:

在与k8s集群通网络段的windows服务器上的浏览器中,输入k8s集群的master或node节点IP及对应nginx映射出的端口号,进行访问,正常的话是可以访问到nginx欢迎页的。

(6)扩展nginx副本:

执行命令:

kubectl scale deployment nginx --replicas=3

(7)查看pod:

通过对nginx进行了扩展副本,然后查看nginx的pod是几个,是否生效,执行命令:

kubectl get pods

Logo

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

更多推荐