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

概述

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

部署软件版本

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. 用root用户登录
2. 打开配置文件 /etc/cletc/cloud/cloud.cfg (每个发行版的配置文件不同,请按照自己的版本,找自己的配置文件)
3. 修改配置 perserve_hostname: true 
4. 重启 让配置文件生效

配置IP(NAT模式)

动态获取
1.用root用户登录
2.在/etc//编写自己的网络配置文件 我的配置文件是 /etc/netplan/50-cloud-init.yaml
network:
    ethernets:
        ens33:
             dhcp4: false
     version: 2     
 3. 使配置文件生效 ,并重启
 netplan apply 
 shutdown -r now
静态IP(永久有效)
过程和动态的一样,只不过配置文件不一样
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

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

docker 安装

推荐看我的另一篇 安装docker

k8s安装及部署

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

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. 添加写权限

    zxt@master:~$ sudo chmod 666 /etc/apt/sources.list.d/kubernetes.list 
    

    再添加,内容如下:

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

    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.
    

    其中:

    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位)

    gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
    

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

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

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. 禁止防火墙

    $ sudo ufw disable
    Firewall stopped and disabled on system startup
    
  2. 关闭swap

    # 成功
    $ sudo swapoff -a 
    # 永久关闭swap分区
    $ sudo sed -i 's/.*swap.*/#&/' /etc/fstab
    
  3. 禁止selinux

# 安装操控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文件

添加内容如下:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0

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

# 【候选】建议执行下面的命令
$ sudo modprobe br_netfilter
$ sudo sysctl -p /etc/sysctl.d/k8s.conf

安装k8s

注意: 切换到root用户 $ su

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

    $ 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. 设置为开机重启

    $ sudo systemctl enable kubelet && systemctl start kubelet
    $ sudo shutdown -r now
    

验证k8s

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

  2. 执行如下个命令

    kubectl get nodes 
    

输出如下

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

    $ kubectl version
    
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. 使用root用户登录
2. 打开配置文件`vim /etc/cloud/cloud.cfg`
3. 修改配置`preserve_hostname: true`

修改hosts文件

使用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节点

创建工作目录`

`$ mkdir /home/zxt/working
$ cd /home/zxt/working/

创建kubeadm.conf配置文件

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

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

生成配置文件

kubeadm config print init-defaults ClusterConfiguration > kubeadm.conf
  1. 修改kubeadm.conf中的如下两项:
  • imageRepository
  • kubernetesVersion
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:
localAPIEndpoint:
  advertiseAddress: 192.168.80.144
  bindPort: 6443

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

  1. 配置子网网络
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. 查看一下都需要哪些镜像文件需要拉取
$ 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. 拉取镜像
#下载全部当前版本的k8s所关联的镜像
kubeadm config images pull --config ./kubeadm.conf

5.3.4 初始化kubernetes环境

#初始化并且启动
$ sudo kubeadm init --config ./kubeadm.conf

更多kubeadm配置文件参数详见

kubeadm config print-defaults

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

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. 执行如下命令

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

# 启动kubelet 设置为开机自启动
$ sudo systemctl enable kubelet
# 启动k8s服务程序
$ sudo systemctl start kubelet

验证kubernetes启动结果

  1. 验证输入,注意显示master状态是NotReady,证明初始化服务器成功
$ kubectl get nodes
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   12m   v1.13.1
  1. 查看当前k8s集群状态
$ 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网络

$cd  /home/zxt/working
$wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

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

 net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }

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

应用当前flannel配置文件

itcast@master:~/working$ kubectl apply -f kube-flannel.yml 

输出结果如下

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

    apt install -y selinux-utils
    swapoff -a
    
  2. 禁止selinux

    setenforce 0
    
  3. 确认关闭防火墙

    ufw disable
    

配置k8s集群的Node主机环境

  1. 启动k8s后台服务

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

    登录master终端

    #将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配置文件环境

$ 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配置文件环境
$ 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指令
$ 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节点.

#将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网络

zxt@node1:~$ kubectl apply -f kube-flannel.yml 
zxt@node2:~$ kubectl apply -f kube-flannel.yml
  1. 查看node是否已经加入到k8s集群中(需要等一段时间才能ready)
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 三节点)在自己本机上搭建过程必要条件基本配置docker 安装k8s安装及部署所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部