欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

搭建K8s集群

程序员文章站 2022-06-12 15:23:19
...

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集群
搭建K8s集群
搭建K8s集群
最后 更新时区文件,然后利用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的包
    
    搭建K8s集群
  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集群

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

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
# 最后面多了个逗号,删掉就行
# 然后重新运行即可

搭建K8s集群

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 --now kubelet
$ systemctl enable kubelet && systemctl start kubelet

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

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

修改三个主机名

命令:

hostnamectl set-hostname node1/2/3

三个主机名不能相同

执行初始化

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

$ kubectl version

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

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

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

# 开始初始化
$ kubeadm init --pod-network-cidr=192.168.126.0/24 --kubernetes-version=v1.16.2 --apiserver-advertise-address=192.168.126.128 --image-repository registry.aliyuncs.com/google_containers
# 参数说明
# =======================================================
# --pod-network-cidr=192.168.126.0/24
# 该参数标识pod网段,同时指定网络模式为calico,后面还会有具体操作
# 确定方式:我只有三台主机分别是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集群
执行一下

然后执行一下

$ kubectl version

搭建K8s集群
发现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集群
至此主节点配置完成

子节点添加

主节点中执行:

$ 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/^.* //'
# 这个我是百度的,怎么来的我还在找,找到后我会更新

获取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了
搭建K8s集群

至此,kube集群配置完成

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