我是靠谱客的博主 苗条衬衫,这篇文章主要介绍Kubernetes(ubuntu 三节点)在自己本机上搭建过程必要条件基本配置docker 安装k8s安装及部署,现在分享给大家,希望可以做个参考。

最近在学习k8s,一直在线上学习。决定自己搭建一个在自己本地跑的k8s环境。为了检验自己在学习成果之外,更是让自己学了会用起来。

部署软件版本

复制代码
1
2
3
4
5
Docker: `docker-ce 18.06` Kubernetes: `k8s 1.13.1

必要条件

1.准备三台ubuntu虚拟机(要是有三台主机的请忽略这一点),在本地搭建环境的化,推荐安装server版的没有Desktop,节省资源。可以k8s集群跑起来不太卡。
2.推荐安装xshell, xftp。这中远程控制linux的软件。在配置集群的时候方便管理虚拟机。
3. 推荐虚拟机跑在vmware 上。不太推荐VirtualBox.毕竟收费更好用一点。(手动滑稽)。
4. 最好做一步,就来一个快照,方便做错,之后回复。
附上 用xshell管理虚拟机的照片,比单个虚拟机之间来回切换好多了。
左边的是master 节点的终端 右边的是两个子节点的终端

在这里插入图片描述

基本配置

安装Ubuntu

这种教程网上一大堆,可以自己去百度一下啊,或者谷歌一下。不过,记得安装的时候把ssh安装上,要是没有安装上,请看我的另一篇,如何在Ubuntu上安装并配置ssh

配置Ubuntu

修改主机名

复制代码
1
2
3
4
5
1. 用root用户登录 2. 打开配置文件 /etc/cletc/cloud/cloud.cfg (每个发行版的配置文件不同,请按照自己的版本,找自己的配置文件) 3. 修改配置 perserve_hostname: true 4. 重启 让配置文件生效

配置IP(NAT模式)

动态获取
复制代码
1
2
3
4
5
6
7
8
9
10
11
1.用root用户登录 2.在/etc//编写自己的网络配置文件 我的配置文件是 /etc/netplan/50-cloud-init.yaml network: ethernets: ens33: dhcp4: false version: 2 3. 使配置文件生效 ,并重启 netplan apply shutdown -r now
静态IP(永久有效)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
过程和动态的一样,只不过配置文件不一样 network: ethernets: ens33: addresses: [192.168.80.144/24] dhcp4: false gateway4: 192.168.80.131 nameservers: addresses: [192.168.80.131] optional: true version: 2 静态的需要 指明ip地址 和其他网络配置 新手推荐动态获取

修改Hosts

复制代码
1
2
3
4
5
6
这一步 是为了让主机通过别名找到集群中的别的主机 编辑 /etc/hosts 把集群的主机ip 和别名 按照下面格式写下来 192.168.80.144 master 重启 让配置生效

docker 安装

推荐看我的另一篇 安装docker

k8s安装及部署

之前这些工作做完之后,可以开始搭建k8s了,一下不具体指明的操作都是三个节点都需要执行了。
我集群主机分配具体如下:

复制代码
1
2
3
4
192.168.80.144 master 192.168.80.145 node1 192.168.80.146 node2

k8s安装

配置并安装k8s国内源

  1. 创建配置文件sudo touch /etc/apt/sources.list.d/kubernetes.list

  2. 添加写权限

    复制代码
    1
    2
    zxt@master:~$ sudo chmod 666 /etc/apt/sources.list.d/kubernetes.list

    再添加,内容如下:

    复制代码
    1
    2
    deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
  3. 执行sudo apt update 更新操作系统源,开始会遇见如下错误

    复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    zxt@master:~$ sudo apt update Get:1 http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease [8,993 B] Err:1 http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6A030B21BA07F4FB Hit:2 http://mirrors.aliyun.com/ubuntu cosmic InRelease Hit:3 http://mirrors.aliyun.com/ubuntu cosmic-updates InRelease Hit:4 http://mirrors.aliyun.com/ubuntu cosmic-backports InRelease Hit:5 http://mirrors.aliyun.com/ubuntu cosmic-security InRelease Err:6 https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu cosmic InRelease Could not wait for server fd - select (11: Resource temporarily unavailable) [IP: 202.141.176.110 443] Reading package lists... Done W: GPG error: http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6A030B21BA07F4FB E: The repository 'http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease' is not signed. N: Updating from such a repository can't be done securely, and is therefore disabled by default. N: See apt-secure(8) manpage for repository creation and user configuration details.

    其中:

    复制代码
    1
    2
    The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6A030B21BA07F4FB

    签名认证失败,需要重新生成。记住上面的NO_PUBKEY 6A030B21BA07F4FB

  4. 添加认证key

    运行如下命令,添加错误中对应的key(错误中NO_PUBKEY后面的key的后8位)

    复制代码
    1
    2
    gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB

    接着运行如下命令,确认看到OK,说明成功,之后进行安装:

    复制代码
    1
    2
    gpg --export --armor BA07F4FB | sudo apt-key add -
  5. 再次重新sudo apt update更新系统下载源数据列表

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
zxt@master:~$ sudo apt update Hit:1 https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu cosmic InRelease Hit:2 http://mirrors.aliyun.com/ubuntu cosmic InRelease Hit:3 http://mirrors.aliyun.com/ubuntu cosmic-updates InRelease Hit:4 http://mirrors.aliyun.com/ubuntu cosmic-backports InRelease Hit:5 http://mirrors.aliyun.com/ubuntu cosmic-security InRelease Get:6 http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease [8,993 B] Ign:7 http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial/main amd64 Packages Get:7 http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial/main amd64 Packages [26.6 kB] Fetched 26.6 kB in 42s (635 B/s) Reading package lists... Done Building dependency tree Reading state information... Done 165 packages can be upgraded. Run 'apt list --upgradable' to see them.

以上没有报和错误异常,表示成功。

禁止基础设施

  1. 禁止防火墙

    复制代码
    1
    2
    3
    $ sudo ufw disable Firewall stopped and disabled on system startup
  2. 关闭swap

    复制代码
    1
    2
    3
    4
    5
    # 成功 $ sudo swapoff -a # 永久关闭swap分区 $ sudo sed -i 's/.*swap.*/#&/' /etc/fstab
  3. 禁止selinux

复制代码
1
2
3
4
5
6
7
8
9
10
# 安装操控selinux的命令 $ sudo apt install -y selinux-utils # 禁止selinux $ setenforce 0 # 重启操作系统 $ shutdown -r now # 查看selinux是否已经关闭 $ sudo getenforce Disabled(表示已经关闭)

k8s系统网络配置

(1) 配置内核参数,将桥接的IPv4流量传递到iptables的链

创建/etc/sysctl.d/k8s.conf文件

添加内容如下:

复制代码
1
2
3
4
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness = 0

(2) 执行命令使修改生效

复制代码
1
2
3
4
# 【候选】建议执行下面的命令 $ sudo modprobe br_netfilter $ sudo sysctl -p /etc/sysctl.d/k8s.conf

安装k8s

注意: 切换到root用户 $ su

  1. 安装Kubernetes 目前安装版本 v1.13.1

    复制代码
    1
    2
    $ apt update && apt-get install -y kubelet=1.13.1-00 kubernetes-cni=0.6.0-00 kubeadm=1.13.1-00 kubectl=1.13.1-00
  2. 设置为开机重启

    复制代码
    1
    2
    3
    $ sudo systemctl enable kubelet && systemctl start kubelet $ sudo shutdown -r now

验证k8s

  1. 使用root用户登录Master主机

  2. 执行如下个命令

    复制代码
    1
    2
    kubectl get nodes

输出如下

复制代码
1
2
3
$ kubectl get nodes The connection to the server localhost:8080 was refused - did you specify the right host or port?
  1. 查看当前k8s版本

    复制代码
    1
    2
    $ kubectl version
复制代码
1
2
3
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:39:04Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"} The connection to the server localhost:8080 was refused - did you specify the right host or port?

节点的配置

把每个节点的主机名字改成集群中的名字,ip地址可以选择动态获取,也可以写全部改成金泰的

复制代码
1
2
3
4
1. 使用root用户登录 2. 打开配置文件`vim /etc/cloud/cloud.cfg` 3. 修改配置`preserve_hostname: true`

修改hosts文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
使用root用户登录 1. 打开hosts文件 `vim /etc/hosts` 2. 输入如下内容 ```shell 192.168.80.144 master 192.168.80.145 node1 192.168.80.146 node2 3. 重启机器`shutdown -r now`

配置master节点

创建工作目录`

复制代码
1
2
3
`$ mkdir /home/zxt/working $ cd /home/zxt/working/

创建kubeadm.conf配置文件

  1. 创建k8s的管理工具kubeadm对应的配置文件,候选操作在home/zxt/working/目录下

使用kubeadm配置文件,通过在配置文件中指定docker仓库地址,便于内网快速部署。

生成配置文件

复制代码
1
2
kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf
  1. 修改kubeadm.conf中的如下两项:
  • imageRepository
  • kubernetesVersion
复制代码
1
2
3
4
5
6
7
8
vi kubeadm.conf # 修改 imageRepository: k8s.gcr.io # 改为 registry.cn-beijing.aliyuncs.com/imcto imageRepository: registry.cn-beijing.aliyuncs.com/imcto # 修改kubernetes版本kubernetesVersion: v1.13.0 # 改为kubernetesVersion: v1.13.1 kubernetesVersion: v1.13.1

现在上面的镜像仓库不能用了,下面是一个新的可用的仓库
registry.aliyuncs.com/google_containers
3. 修改kubeadm.conf中的API服务器地址,后面会频繁使用这个地址。

  • localAPIEndpoint:
复制代码
1
2
3
4
localAPIEndpoint: advertiseAddress: 192.168.80.144 bindPort: 6443

注意: 192.168.80.144是master主机的ip地址

  1. 配置子网网络
复制代码
1
2
3
4
5
6
networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12 scheduler: {}

这里的10.244.0.0/1610.96.0.0/12分别是k8s内部pods和services的子网网络,最好使用这个地址,后续flannel网络需要用到。

拉去K8S必须的镜像

  1. 查看一下都需要哪些镜像文件需要拉取
复制代码
1
2
3
4
5
6
7
8
9
$ kubeadm config images list --config kubeadm.conf registry.cn-beijing.aliyuncs.com/imcto/kube-apiserver:v1.13.1 registry.cn-beijing.aliyuncs.com/imcto/kube-controller-manager:v1.13.1 registry.cn-beijing.aliyuncs.com/imcto/kube-scheduler:v1.13.1 registry.cn-beijing.aliyuncs.com/imcto/kube-proxy:v1.13.1 registry.cn-beijing.aliyuncs.com/imcto/pause:3.1 registry.cn-beijing.aliyuncs.com/imcto/etcd:3.2.24 registry.cn-beijing.aliyuncs.com/imcto/coredns:1.2.6
  1. 拉取镜像
复制代码
1
2
3
#下载全部当前版本的k8s所关联的镜像 kubeadm config images pull --config ./kubeadm.conf

5.3.4 初始化kubernetes环境

复制代码
1
2
3
#初始化并且启动 $ sudo kubeadm init --config ./kubeadm.conf

更多kubeadm配置文件参数详见

复制代码
1
2
kubeadm config print-defaults

k8s启动成功输出内容较多,但是记住末尾的内容

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Your Kubernetes master has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You 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/ You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.80.144:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:e778d3665e52f5a680a87b00c6d54df726c2eda601c0db3bfa4bb198af2262a8

按照官方提示,执行以下操作。

  1. 执行如下命令

    复制代码
    1
    2
    3
    4
    $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
  2. 创建系统服务并启动

复制代码
1
2
3
4
5
# 启动kubelet 设置为开机自启动 $ sudo systemctl enable kubelet # 启动k8s服务程序 $ sudo systemctl start kubelet

验证kubernetes启动结果

  1. 验证输入,注意显示master状态是NotReady,证明初始化服务器成功
复制代码
1
2
3
4
$ kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady master 12m v1.13.1
  1. 查看当前k8s集群状态
复制代码
1
2
3
4
5
6
$ kubectl get cs NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health": "true"}

目前只有一个master,还没有node,而且是NotReady状态,那么我们需要将node加入到master管理的集群中来。在加入之前,我们需要先配置k8s集群的内部通信网络,这里采用的是flannel网络。

部署flannel网络

复制代码
1
2
3
$cd /home/zxt/working $wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

编辑这个文件,确保flannel网络是对的,找到net-conf.json标记的内容是否正确。

复制代码
1
2
3
4
5
6
7
net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" }

这个"10.244.0.0/16"和 ./kubeadm.conf中的podsubnet的地址要一致。

应用当前flannel配置文件

复制代码
1
2
itcast@master:~/working$ kubectl apply -f kube-flannel.yml

输出结果如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
root@master:~/working# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/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

配置Node

确认外部环境

  1. 确认关闭swap

    复制代码
    1
    2
    3
    apt install -y selinux-utils swapoff -a
  2. 禁止selinux

    复制代码
    1
    2
    setenforce 0
  3. 确认关闭防火墙

    复制代码
    1
    2
    ufw disable

配置k8s集群的Node主机环境

  1. 启动k8s后台服务

    复制代码
    1
    2
    3
    4
    5
    # 启动kubelet 设置为开机自启动 $ sudo systemctl enable kubelet # 启动k8s服务程序 $ sudo systemctl start kubelet
  2. 将master机器的/etc/kubernetes/admin.conf传到到node1和node2

    登录master终端

    复制代码
    1
    2
    3
    4
    5
    #将admin.conf传递给node1 sudo scp /etc/kubernetes/admin.conf zxt@192.168.236.145:/home/zxt/ #将admin.conf传递给node2 sudo scp /etc/kubernetes/admin.conf zxt@192.168.236.146:/home/zxt/
  3. 登录node1终端,创建基础kube配置文件环境

复制代码
1
2
3
4
$ mkdir -p $HOME/.kube $ sudo cp -i $HOME/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 登录node2终端,创建基础kube配置文件环境
复制代码
1
2
3
4
$ mkdir -p $HOME/.kube $ sudo cp -i $HOME/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. node1node2分别连接master加入master集群。这里用的是kubeadm join指令
复制代码
1
2
$ sudo kubeadm join 192.168.236.177:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:e778d3665e52f5a680a87b00c6d54df726c2eda601c0db3bfa4bb198af2262a8

这里要注意,使用的hash应该是master主机 kubeadm init成功之后生成的hash码。

  1. 应用两个node主机分别应用flannel网络

master中的kube-flannel.yml分别传递给两个node节点.

复制代码
1
2
3
4
5
#将kube-flannel.yml传递给node1 sudo scp $HOME/working/kube-flannel.yml zxt@192.168.80.145:/home/zxt/ #将kube-flannel.yml传递给node2 sudo scp $HOME/working/kube-flannel.yml zxt@192.168.80.146:/home/zxt/

分别启动flannel网络

复制代码
1
2
zxt@node1:~$ kubectl apply -f kube-flannel.yml
复制代码
1
2
zxt@node2:~$ kubectl apply -f kube-flannel.yml
  1. 查看node是否已经加入到k8s集群中(需要等一段时间才能ready)
复制代码
1
2
3
4
5
6
zxt@node2:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 35m v1.13.1 node1 Ready <none> 2m23s v1.13.1 node2 Ready <none> 40s v1.13.1

这样k8s就搭建起来了。

最后

以上就是苗条衬衫最近收集整理的关于Kubernetes(ubuntu 三节点)在自己本机上搭建过程必要条件基本配置docker 安装k8s安装及部署的全部内容,更多相关Kubernetes(ubuntu内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部