云原生之:不翻墙,使用最新版本的k8s搭建测试环境

Posted 超神说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生之:不翻墙,使用最新版本的k8s搭建测试环境相关的知识,希望对你有一定的参考价值。



目标:共同学习、共同进步、告别码农,成为受人敬仰的、有态度的程序猿。拒绝不知其所以然的复制粘贴、拒绝人云亦云。用最严谨的态度、最专业的方法、最可靠的知识来源,探究技术内幕,死磕到底!!!




内容简介

中国的开发人员比较苦,各种被墙(不多说了)。

今天我们一起学习一下如何在不翻墙的前提下,使用官方提供的步骤完成最新版本k8s的安装。注意:该方法安装的环境只能用于测试环境,不应用于生产环境。

目录:

  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,根据自己主机的操作系统选择相应的安装文件,完成下载。

        

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

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


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

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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

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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境


4.     安装docker

  • 删除旧版本的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-utilssudo yum-config-manager --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
  • 安装docker引擎

sudo yum install 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

  • 设置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
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 kubele


6.     拉取所需镜像

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

sudo kubeadm config images lis

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

云原生之:不翻墙,使用最新版本的k8s搭建测试环境


  • 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

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

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


7.    初始化k8s的master节点

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

sudo kubeadm init

云原生之:不翻墙,使用最新版本的k8s搭建测试环境

  • 安装网络插件。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节点。

echo 1 > /proc/sys/net/ipv4/ip_forwardkubeadm join 10.0.2.11:6443 --token z22090.w2lg382rqn8brwg3 --discovery-token-ca-cert-hash sha256:791a61d4d280015676c29113d66262f58490d2be36ac835f9f578b021810d4df
  • 第二台node节点如上创建。

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

kubectl get nodes

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

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


10.  结束

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





关于作者

简介:10年JAVA开发经验,多年架构师经验。获得国家“系统架构设计师”、“PMP”、“mysql DBA OCP”、“TOGAF9鉴定级”、“K8s CKA”、“Scrum Master PSM”等证书。擅长Java全栈开发、DevOps、架构设计、领域驱动、研发管理等。

邮箱:83035964@qq.com

博客:https://blog.csdn.net/genie2014(刚刚开始写博客,内容不多)



写在最后

如果大家在工作或学习中遇到技术问题,可以通过邮箱或留言联系我,若问题具有代表性,我可以录制专门的视频对问题的成因和解决方案进行讲解。

为什么这次不是视频了?因为懒。。。(录制视频需要的时间太长,而且不方便后期的快速回顾,因此后面都会优先使用图文)



以上是关于云原生之:不翻墙,使用最新版本的k8s搭建测试环境的主要内容,如果未能解决你的问题,请参考以下文章

云原生centos7搭建安装k8s集群 v1.25版本详细教程实战

云原生之kubernetes实战使用Sealos部署k8s集群环境

云原生之kubernetes实战使用kubeadm部署k8s集群环境

云原生之kubernetes实战在k8s环境下部署Leanote蚂蚁笔记工具

云原生之kubernetes实战在k8s环境下部署Heimdall导航页

云原生之kubernetes实战在k8s环境下部署KubeGems云管理平台