搭建K8s集群

目录

  • Istio 尝试 (二):搭建K8s集群
    • 前期工作
      • 安装``vim``
      • 安装``htop``(非必须)
      • 安装``ntpdate``
      • 安装``ifconfig``
    • 环境保障
      • 关闭防火墙
      • 关闭Swap分区
    • 安装
      • Docker安装
      • Kubectl Kubelet Kubeadm 的安装
      • 修改三个主机名
      • 执行初始化
        • 初始化常见错误、警告(目前我遇到的)
      • 子节点添加

Istio 尝试 (二):搭建K8s集群

文本继承上一篇虚拟机的内容,环境准备
如有需要本位完全可以作为k8s的独立搭建过程,不涉及istio的任何问题。

前期工作

由于k8s 的全称为kubernetes,因此,我可能会将k8s成为kube、kuber等。

安装vim

由于配置过程中需要编辑大量文件,而我本人相比于vi我更喜欢vim,因此,本问后续文章都将以vim作为编辑器,推荐大家安装一下。

$ yum install vim -y
$为指令标志,无需复制

安装htop(非必须)

由于后面可能观察性能方面的数据,使用top来展示数据不是很明显,因此考虑使用htpo,执行下列指令

$ yum install epel-release -y 
#启用htop的安装源
$ yum install htop -y         
#安装htop
# 为注释行,忽略,$符号为指令标志,无需复制

安装ntpdate

由于各个节点之间的时间必须一致,因此需要同步时间,但是由于手动配置存在误差因此,使用ntpdate进行同步

进行安装

$ yum install ntpdate -y

执行后开始同步时间

$ tzselect

然后按照图片进行选择即可
搭建K8s集群_第1张图片
搭建K8s集群_第2张图片
搭建K8s集群_第3张图片
最后 更新时区文件,然后利用ntp同步时间(我选择的ntp服务器是上海的)

$ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
$ ntpdate ntp.api.bz

安装ifconfig

由于后面需要确定集群ip/mac等信息,指令:ip addr显示的信息不是很全面,因此考虑使用ifconfig

直接安装ifconfig会失败

  1. 查找包
    $ yum search all ifconfig
    # 查找ifconfig的包
    
    在这里插入图片描述
  2. 我们选择net-tools.x86_64进行安装即可
    $ yum install -y net-tools.x86_64
    # 安装
    
  3. 然后尝试使用ifconfig
    $ ifconfig
    # 如果显示command not find 则使用 /sbin/ifconfig
    
  4. 如果ifconfig 显示command not find 而 /sbin/ifconfig正常,我们需要添加ifconfig到环境路径
# 编辑profile文件
$ vim /etc/profile
# 如果没有vim,使用vi也可以

搭建K8s集群_第4张图片

在文件最下面添加如上两行

PATH=$PATH:/sbin/ifconfig
export PATH

退出保存即可

以上操作在三个节点都要执行

环境保障

有的博客说,如果启用linux的swap后,会造成服务的不稳定,对于虚拟机而言,关了其实也无所谓,所以决定关闭一些可能会造成影响的东西(不能用于生产环境)

关闭防火墙

$ systemctl stop firewalld & systemctl disable firewalld

关闭Swap分区

编辑/etc/fstab文件,注释到带有swap的那一行(需要注释的行的行最前面加上#号即可)

安装

Docker安装

$ yum install docker
# 安装docker
$ systemctl start docker
# 启动服务(非永久)

由于Docker的源不在国内,很容易出现超时,所以切换源到DaoCloud的加速器即可

$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# 出现 success字样即成功,然后重启服务
$ systemctl restart docker
# 这里概率会出现错误,我的错误原因是执行脚本修改后的/etc/docker/daemon.json
# 最后面多了个逗号,删掉就行
# 然后重新运行即可

在这里插入图片描述

Kubectl Kubelet Kubeadm 的安装

由于文件在过外,因此使用阿里云镜像仓
输入/复制下面指令即可

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

然后关闭:SeLinux

$ setenforce 0
# 执行以下就行

然后开始安装

$ yum install -y kubelet kubeadm kubectl

启动Kubelet服务

$ systemctl enable kubelet && systemctl start kubelet

如果操作正常是不会出现问题的(仅限我的版本-2019-11-13),后续版本不会保证,有博客说会出现证数的认证问题,跳过即可。

kubelet\kubelet\kubeadm 需要在三台主机都安装!

修改三个主机名

命令:

hostnamectl set-hostname node1/2/3

三个主机名不能相同

然后配置路由表
编辑/etc/hosts
添加三个节点和路径
格式如下
搭建K8s集群_第5张图片

执行初始化

首先确定kubectl的版本,最好要搭建的集群版本相同
kubectl的版本获取:

$ kubectl version

搭建K8s集群_第6张图片
表明我的版本应该为1.16.2,那么下一步初始化集群的时候,就应该使用改版本号

#以下命令请一条一条执行,本条执行彻底完成后,再支持下一条!

#启动docker.service服务(与之前不同,请务必执行)
$ systemctl enable docker.service

# 开始初始化
$ kubeadm init --pod-network-cidr=172.16.0.0/16 --kubernetes-version=v1.16.2 --apiserver-advertise-address=192.168.126.128 --image-repository registry.aliyuncs.com/google_containers
# 参数说明
# =======================================================
# --pod-network-cidr=172.160.0.0/16
# 该参数标识pod网段,同时指定网络模式为calico,后面还会有具体操作
# 该参数不能和虚拟机地址重复,否则网卡冲突,将会导致xshell无法连接
# 确定方式:我只有三台主机分别是192.168.126.128/129/130,都在
# 		192.168.126 内,因此我选用192.168.126.0/24,子网掩码
#		就是24:255.255.255.0,如果你确定不了,选取三个主机都
#		重复的ip范围:我的就是192.168.126.0,然后除了0的数字有
#		几个就写几个*8,那这里就是 3*2=24,如果是 192.168.0.0
#		那就是2*8=16,因此数据为:192.168.0.0/16,涉及到网络
#		知识,24为子网掩码的一种标识方法,具体请学习网络相关的知识
#========================================================
#--kubernetes-version=v1.16.2
#该参数指定kube版本号,与之前的kubectl一样就行
#========================================================
#--apiserver-advertise-address=192.168.126.128
#本机地址即可,应该要修改成你自己的
#========================================================
#--image-repository registry.aliyuncs.com/google_containers
# 由于数据不在国内,因此使用阿里镜像即可下载

# 如果初始化失败 使用 kubeadm reset 恢复
# 修复后再次执行 kubeadm init .....

初始化常见错误、警告(目前我遇到的)

  1. [ERROR FileContent–proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1

    与第三条类似,路由转发问题

    执行:

    $ echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
    
  2. [ERROR Swap]: running with swap on is not supported. Please disable swap

    没有关闭交换区

    执行:

    $ swapoff -a
    
  3. [ERROR FileContent–proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
    Linux ip4路由转发问题

    详细说明 跳转连接

    执行:

    $ echo "1" > /proc/sys/net/ipv4/ip_forward
    
  4. [WARNING Hostname]: hostname “node1” could not be reached

    配置一下host,具体如何配置请百度

  5. [WARNING Hostname]: hostname “node1”: lookup node1 on 192.168.126.2:53: no such host

    网段问题,跳过即可

安装成功后需要执行一下指令
搭建K8s集群_第7张图片
执行一下

然后执行一下

$ kubectl version

在这里插入图片描述
发现server version已经正常了,那么就算安装成功了

然后,主节点还需要配置一下网络,由于之前的参数,所以我选择Calico网络模式

$ kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

最后,执行

$ kubectl get pod -n kube-system

过了大约3分钟左右,如果所有pod全部为running,则运行成功,否则在等等,如果还有pending的,恢复镜像,重新操作,其他稍微翻译一下应该能看懂。
搭建K8s集群_第8张图片
至此主节点配置完成

子节点添加

主节点中执行:

$ kubeadm token create

获取的token

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 这个我是百度的,怎么来的我还在找,找到后我会更新
# 更新,该值来自官网,官网给出的指令。在之前存在一种方式能够直接一键创建token
# 和该值,后来因为某些原因取消了。

获取ca sha256的值

字节中执行

$ kubeadm join 主机ip:6443 --token 之前获取的token ----discovery-token-ca-cert-hash sha256:之前获取的sha256的值

# 同主节点初始化问题,如果出现问题依照上面的部分解决办法即可修改,然后如果出现错误请执行:kubeadm reset

回到主节点中执行

kubectl get node

如果出现新的节点则正确,由于我之前忘记改名字,因此NAME为localhost.localdomain,状态为NotReady,过一会再次检测,就是ready了
在这里插入图片描述

至此,kube集群配置完成

我踩了一天的坑,重置镜像好多次,看了好多的文档,有官方的、非官方的,所以如果有需要,转载复制请声明出处,无需请求,蟹蟹。

你可能感兴趣的:(Java,常用框架练习,#Istio系列)