有些情况不支持你连接外网,那么这种情况下就不支持kubespray方式了,那如何安装kubenetes呢?下面我们再采用二进制的方式来进行安装下看看吧。
介绍
二进制安装方式,也被称为kubernetes-the-hard-way(k8s的困难方法),有以下特征:
生产高可用
证书永不过期
不依赖第三方ansible等工具
采用本地代理,不依赖haproxy或者keepalived
那么这种方式适合哪种人使用呢?
深入学习的人
喜欢掌控每个组件的人
正在部署生产环境的人
上面太官方了哈,简单的来说,这种方式就是你能控制每个组件如何进行安装,而不像kubespary那种方式,直接一键化部署了,很多东西自己都不能掌控,出问题都不知道是哪儿的问题。
不过两种方式如何取舍,还是要看个人习惯哈。不能说哪种好,哪种差。各有千秋吧。
环境
CPU>=2核,内存>=2G,其他信息如下:
node-name | ip-address | role |
node1 | 192.168.112.130 | master、etcd |
node2 | 192.168.112.131 | master、worker、etcd |
node3 | 192.168.112.132 | worker、etcd |
本次所有安装使用root用户进行。
配置主机名和路由
PS:需要在三个节点上都进行操作
[root@localhost ~]# vim /etc/hostname
node1 # 三台服务器每台写自己的名字
[root@localhost ~]# hostname node1
[root@localhost ~]# bash
[root@node1 ~]# vim /etc/hosts
192.168.112.130 node1
192.168.112.131 node2
192.168.112.132 node3
[root@node1 ~]#
安装依赖
PS:需要在三个节点上都进行操作
# 更新yum源
[root@node1 ~]# yum update -y
# 下载依赖
[root@node1 ~]# yum install -y socat conntrack ipvsadm ipset jq sysstat curl iptables libseccomp yum-utils
策略调整
PS:需要在三个节点上都进行操作
[root@node1 ~]# setenforce 0
[root@node1 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@node1 ~]# systemctl stop firewalld.service
[root@node1 ~]# systemctl disable firewalld.service
[root@node1 ~]# iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
[root@node1 ~]# swapoff -a
[root@node1 ~]# systemctl stop dnsmasq.service
[root@node1 ~]# systemctl disable dnsmasq.service
参数设置
PS:需要在三个节点上都进行操作
[root@node1 ~]# vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
vm.overcommit_memory = 1
[root@node1 ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
免密配置
PS:在node1节点操作即可
[root@node1 ~]# ssh-keygen # 一路回车就行
[root@node1 ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDImB4dg1iR14Ghmd6J2h2BhBxZi59NR3xgD3dXWn8i3VPpzydKhR5bw2Q8+gqQPGqUtGCWbjtf30KrMGm2idpf8GJu5caJVMSFoscSYbv9nv9UvNCEuyDSgmpoZSDBxNK9CxBSNSBCvyOcFrjGyEyrBBCyjFVH/T71hG9SUwvdR3E38Qyv7/npYmVaoLADvDDf9E1c6siQLe8jbhvz6fjXVXLFG00/+1p6qox8dvNKQK30D7rYB8NunqnMN4vDFarQSCRJ8u6x9yThqTV0j8G8pXX3YkmMbTJT7BqAjeF3fuDgoy57/s3CgjxPqKE09tqx2B9Qaj/Lud/8xCfQ2Xvr root@node1
[root@node1 ~]#
PS:需要在三个节点上都进行操作,包括node1
# 将上一步cat之后获取的信息进行分发
[root@node1 ~]# echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDImB4dg1iR14Ghmd6J2h2BhBxZi59NR3xgD3dXWn8i3VPpzydKhR5bw2Q8+gqQPGqUtGCWbjtf30KrMGm2idpf8GJu5caJVMSFoscSYbv9nv9UvNCEuyDSgmpoZSDBxNK9CxBSNSBCvyOcFrjGyEyrBBCyjFVH/T71hG9SUwvdR3E38Qyv7/npYmVaoLADvDDf9E1c6siQLe8jbhvz6fjXVXLFG00/+1p6qox8dvNKQK30D7rYB8NunqnMN4vDFarQSCRJ8u6x9yThqTV0j8G8pXX3YkmMbTJT7BqAjeF3fuDgoy57/s3CgjxPqKE09tqx2B9Qaj/Lud/8xCfQ2Xvr root@node1" >> ~/.ssh/authorized_keys
[root@node1 ~]#
软件包下载
可以从google上进行下载,我这里也准备了一份下载好的,在公众号“运维家”后台回复 “二进制k8s” ,即可获取下载地址。我看了下,最新版貌似是1.23.4版本,我这里提供的是1.20.2版本。
软件包分发
上传到任一节点上,我这里上传的是node1节点。
[root@node1 ~]# pwd
/root
[root@node1 ~]# tar xf kubernetes-v1.20.2.tar.gz
[root@node1 ~]# cd kubernetes-v1.20.2/
[root@node1 kubernetes-v1.20.2]# ls
etcd-v3.4.10-linux-amd64.tar.gz kube-apiserver kube-controller-manager kubectl kubelet kube-proxy kube-scheduler
[root@node1 kubernetes-v1.20.2]# chmod +x kube*
# 分发master组件
[root@node1 kubernetes-v1.20.2]# MASTERS=(node1 node2)
[root@node1 kubernetes-v1.20.2]# for instance in ${MASTERS[@]}; do scp kube-apiserver kube-controller-manager kube-scheduler kubectl root@${instance}:/usr/local/bin/; done
# 分发worker组件
[root@node1 kubernetes-v1.20.2]# WORKERS=(node2 node3)
[root@node1 kubernetes-v1.20.2]# for instance in ${WORKERS[@]}; do scp kubelet kube-proxy root@${instance}:/usr/local/bin/; done
# 分发etcd组件
[root@node1 kubernetes-v1.20.2]# tar xf etcd-v3.4.10-linux-amd64.tar.gz
[root@node1 kubernetes-v1.20.2]# cd etcd-v3.4.10-linux-amd64/
[root@node1 etcd-v3.4.10-linux-amd64]# ETCDS=(node1 node2 node3)
[root@node1 etcd-v3.4.10-linux-amd64]# for instance in ${ETCDS[@]}; do scp etcd etcdctl root@${instance}:/usr/local/bin/; done
至此,本文结束。基础环境就准备好了,接下来就开始具体安装每一个小组件。