注意:我是先写的公众号文章,然后拷贝过来的,但是拷贝过来后样式很多都乱了,有些文字写的命令也变成了图片并且单词拼写和换行都有问题,如果需要更好的阅读体验或者需要拷贝命令,可以查看我的公众号文章:https://mp.weixin.qq.com/s/lliTIqXJCJvNupr9PGQX3A

当前最新版本的k8s版本为1.18.5。

目录:

  1. 前言

  2. 安装虚拟机软件

  3. 创建虚拟机并安装centos7系统

  4. 安装docker

  5. 安装kubeadm,kubelet和kubectl

  6. 拉取所需镜像

  7. 创建虚拟机副本

  8. 初始化k8s的master节点

  9. 加入node节点

  10. 结束

下面就正式开始。

1.   前言

      我们会在一台主机上使用虚拟机软件构件一台master节点两台node节点,因此需要宿主机支持虚拟化(大部分电脑都支持,安装虚拟机软件时如果主机不支持虚拟化则无法完成安装)。

      需要宿主机内存至少16G,磁盘容量至少40G。

2.    安装虚拟机软件

       我们使用的虚拟机软件为Oracle公司的VirtualBox,使用当前最新版本6.1.10。使用VMware也可以,但后者为收费软件,且相对于前者自身使用的主机资源略多,在测试场景下略显笨重。

       步骤:

  • 下载安装包:访问网站https://www.virtualbox.org/wiki/Downloads,根据自己主机的操作系统选择相应的安装文件,完成下载。

  • 双击安装包进行安装(这步就不解释了)。

  • 下一步、下一步、下一步。安装结束......

3.     创建虚拟机并安装centos7系统

  • 下载centos7的iso安装文件:访问http://isoredirect.centos.org/centos/7/isos/x86_64/,选择一个mirror进行下载(我用的是163的)。在新页面中选择后缀是“Minimal”的就可以了。

  • 创建虚拟机:打开VirtualBox,点击新建,输入名称(任意),类型选择"Linux",版本选择“Other Linux (64-bit)”,点击“下一步”;内存大小设置为2048MB,点击“下一步”;虚拟硬盘设置都使用默认值,大小设置为10G,点击创建。CPU核数设置为2。

  • 安装centos7系统:右键点击左侧刚创建出来的虚拟机,选择“设置”。在弹出窗口选择“存储”,点击“没有盘片”,点击“选择虚拟盘”。选择第一步中下载的centos7的iso安装文件。

  • 安装系统:点击VirtualBox上方的启动按钮,此时会引导安装过程。若无法进入安装过程,在“设置——系统——启动顺序”中将硬盘向上移动到顶部。安装过程就不详细说了,先选语言(我这选的默认的英语),然后设置时区(亚洲,上海)。这里重点说一下分区。由于我们是测试环境,因此只需要/boot分区和根分区就行了,这里注意不要建立swap分区。如下图进入分区设置。

       选择好后点击左上角的“Done”。在页面左下角点击“加号”创建/boot分区,大小200mb,点击右下角“Add mont point”。创建好后再次点击“加号”,创建/分区(“/”代表根分区),不填大小,这样会使用剩余的所有磁盘容量。最后点击左上角的“Done”完成分区设置(需要点两下“Done”,目的是为了确认,下方会有提示)。在最后弹出的确认窗口中点击“Accept Changes”。

 

 

 

  • 设置root用户的密码:在接下来的窗口选择“ROOT PASSWORD”进行设置。接下来就是等待安装结束。安装完成后,使用用户名root和刚刚设置的密码登录。

  • 设置全局网络:由于是测试环境,因此我们的虚拟机采用“NAT”连接方式。首先先关闭虚拟机窗口(选择“正常关闭”),在VirtualBox左上角选择“管理——全局设定”,弹出窗口中选择“网络”,点击右侧“加号”新增一个NAT网络。如果需要宿主机访问虚拟机的网络,可以在端口转发规则中设置响应的转发,这里不做详细说明。然后选择刚创建的虚拟机,右键点击“设置——网络”,连接方式选择“NAT 网络”,界面名称选择刚刚在全局设置中创建的NAT网络。然后启动虚拟机。

  • 设置虚拟机网络:重启虚拟机。编辑/etc/sysconfig/network-scripts/ifcfg-enp0s3(文件名后面的enp0s3可能会不同)。BOOTPROTO要从默认的dhcp改成static,下面的IPADDR用于设置本机的ip地址,子网网段为NAT网络中设置的网络CIDR。

  • 设置DNS:编辑/etc/resolv.conf文件(默认里面是空的),添加如下内容(这里添加的DNS是google的,如果不能使用,可以改成为国内的,每个省市不同,比如我所在的西安市为61.134.1.4和61.134.1.5)。设置好后可以ping一下baidu.com来测试网络是否畅通,如果不同,则需排查问题。

  • 设置hostname:执行命令hostnamectl set-hostname 名称来设置。例如hostnamectl set-hostname node-1。

  • 关闭防火墙:由于是测试环境,为了避免不必要的麻烦,关闭防火墙,使用命令:systemctl stop firewalld

  • 制作虚拟机副本(可选):这一步是可选的,主要是因为安装一个系统要重复执行上面的所有步骤,这样太麻烦了,因此创建一个副本,免去重复安装的问题。创建副本的时候要先关闭虚拟机,并且一定要注意要选择“为所有网卡重新生成mac地址”。创建好的副本可以直接当作一台新虚拟机使用,但要重新设置ip地址和hostname。

4.     安装docker

        以下步骤来自于Docker官方文档,地址是https://docs.docker.com/engine/install/centos/。

  • 删除旧版本的docker:我们的centos是新装的,不存在旧版本,但是为了保持完整性和一致性,我们还是按照官方文档执行。

sudo yum remove docker \                docker-client \                docker-client-latest \                docker-common \                docker-latest \                docker-latest-logrotate \                docker-logrotate \                docker-engine
  • 安装和使用docker仓库

sudo yum install -y yum-utilsudo yum-config-manager     https://download.docker.com/linux/--add-repo \centos/docker-ce.repo
  • 安装docker引擎

sudo yum intall docker-ce docker-ce-cli containerd.i

        上方的命令是安装最新版本的docker,如果要选择特定的docker版本,如            下。先查看各个版本的版本号

sudo yum list docker-ce --showduplicates | sort -r

         然后选择特定的版本号进行安装

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
  • 启动docker

sudo systemctl start docker

 

  • 设置docker开机自启动(可选)。该步骤不在官方文档中,但比较实用。

sudo systemctl enable docker

 

5.     安装kubeadm,kubelet和kubectl

        以下步骤来自于k8s官方文档,地址是https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

  • 设置iptables的桥接网络

sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF
sudo sysctl --system
  • 安装kubeadm、kubelet和kubectl:kubeadm用于初始化集群;kubelet需要被安装于集群中的所有机器,用于启动pods和容器等;kubectl用于以命令行的方式操作集群。注意:由于被墙的原因,这里使用的yum仓库地址是阿里巴巴的镜像。注意:这样装出来的是最新版本的k8s,如果要指定版本(比如此刻最新的版本是1.18.5),方法和上面指定docker版本是一样的,只需要将其中的docker组件换成k8s的这三个组件。

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgexclude=kubelet kubeadm kubectlEOF
sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetessudo systemctl enable --now kubelet

 

6.     拉取所需镜像

  • 这一步不是官方的步骤,但是由于被墙的原因,必须先准备好k8s创建集群时所需要的各种镜像。执行下面的命令可以查看刚刚安装的k8s版本所对应的镜像及版本列表。

sudo kubeadm config images lis

  • 接下来就要祭出法宝了——github和dockerhub。原理是这样的:这些镜像本身就是docker镜像,这样就可以使用自定义的Dockerfile进行构建,但如果是在本地构建的时候会被墙,这时就需要使用dockerhub了,它是docker的官方仓库,在上面注册账号后可以上传自己的镜像,同时dockerhub支持自动构建,可以把Dockerfile放到github的代码仓库中,然后让dockerhub去构建,这样就会得到我们自己的镜像了,然后pull到本地后,修改tag为k8s默认的名称,这样k8s在创建集群的时候发现本地已经有了,就不会再去拉取了。下面展示几张图简单演示一下。大家在搭建的时候,如果k8s版本和我一样也是1.18.5,则可以直接使用我做好的镜像。我的github地址是https://github.com/genie2014/docker-image-mirror,dockerhub中搜索genie2014

 

  • pull镜像和修改tag的命令如下

docker pull genie2014/k8s.gcr.io-kube-apiserver:v1.18.5docker tag genie2014/k8s.gcr.io-kube-apiserver:v1.18.5 k8s.gcr.io/kube-apiserver:v1.18.5

 

echo 1 > /proc/sys/net/ipv4/ip_forwardkubeadm join 10.0.2.11:6443 --token z22090.w2lg382rqn8brwg3     --discovery-token-ca-cert-hash sha256:791a61d4d280015676c29113d66262f58490d2be36ac835f9f578b021810d4df

 

 

kubectl get nodes

 

kubeadm resetiptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

 

  • 创建虚拟机副本(可选)。后面还需要创建两个node节点,因此此时最好创建一个虚拟机副本,用于后面两个节点的创建。具体方法参照前面说的创建副本的方法。

    7.    初始化k8s的master节点。

  • 执行命令如下,执行后控制台输出的日志中有提示如何进行下一步的操作及如何加入node节点,执行mkdir命令开始的三条命令,直接复制粘贴执行就行了。将最后一条kubeadm join命令拷贝出来,后面要用。

    sudo kubeadm init
  •  

  • 安装网络插件。k8s使用cni定义了网络协议,但需要引入具体的实现。目前k8s的文档中已经没有了之前常用的flannel,默认的变成了calico。这个镜像也是被墙的,需要使用上面的方法进行处理,具体的版本可以访问下面命令中的连接,查看calico.yaml中的image部分,当前版本是3.14.1,我的docker仓库中也是有的。

  • kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

    9.    加入node节点。

  • 从上面制作的虚拟机镜像拷贝出一个node虚拟机,启动后修改里面的hostname和ip地址,然后执行下面的命令。注意:第二行的命令是我本机上的,不能直接执行,要执行上面拷贝的那个。

  • 第二台node节点如上创建。

  • 验证安装是否正确。登录master节点的主机,执行下面命令,看节点数量是否正确,状态是否是“Ready”(我这里node-2是“NotReady”是因为我就没启动node-2这台虚拟机)。

  • 还原(可选)。如果在初始化master节点或者加入node节点时遇到问题,要重复执行命令之前必须先还原,使用下面的命令。

10.  结束

      完成上面的操作之后,k8s的集群就安装完毕了。如果你一次就安装成功,我只能说你的运气太好了。反正我每次装都会重复几次,不知漏掉这个配置就漏掉那个,或者因为环境不同发生各种问题,遇到问题不要怕,推荐先去看官方网站搜索相关主题,如果实在解决不了,是可以给我邮件的哦。

 

更多内容请关注我的公众号:

Logo

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

更多推荐