linux下离线安装k8s集群1.19.4附带nfs存储
活动地址:毕业季·进击的技术er
一,环境简介
kubernetes-1.19.4集群部署计划 | ||||
序号 | 服务器配置 | IP地址 | 操作系统 | 备注 |
1 | cpu:2c 内存:4G | 192.168.217.16 | centos 7.6 | k8s主节点 |
2 | cpu:2c | 192.168.217.17 | centos 7.6 | k8s从节点 |
3 | cpu:2c | 192.168.217.18 | centos 7.6 | k8s从节点 |
三台服务器均为虚拟机,网络配置为nat模式。
链接:https://pan.baidu.com/s/19PTj1VwpvaSxYlhbFuqP6w?pwd=k8ss
提取码:k8ss
离线安装包的链接!!!!!!!!!!!!!包含docker环境
二,
关于域名映射问题和网络问题,主机名称修改如下,如何修改在此不讨论。
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 192.168.217.16 master
- 192.168.217.17 slave1
- 192.168.217.18 slave2
编辑hosts文件,域名映射如上。因是nat网络模式,因此,三台服务器自组网,三个网卡配置文件内容大体如下:
- TYPE="Ethernet"
- BOOTPROTO="static"
- DEFROUTE="yes"
- IPV4_FAILURE_FATAL="no"
- NAME="ens33"
- UUID="d4876b9f-42d8-446c-b0ae-546e812bc954"
- DEVICE="ens33"
- ONBOOT="yes"
- IPADDR=192.168.217.16
- NETMASK=255.255.255.0
- GATEWAY=192.168.217.2
- DNS1=192.168.217.16
三,
network服务已启用则关闭NetworkManager防止冲突
systemctl stop NetworkManager && systemctl disable NetworkManager
四,时间服务器
五,
内核参数修改,
这个步骤是必须要有的,k8s在安装和使用的过程中会检测这三个参数:
vim /etc/sysctl.conf
- net.bridge.bridge-nf-call-ip6tables = 1
- net.bridge.bridge-nf-call-iptables = 1
- net.ipv4.ip_forward = 1
写入这几个参数在sysctl.conf 文件内,然后sysctl -p 命令 使之生效。
六,
三台服务器都关闭防火墙,selinux,swap挂载,升级内核版本到5.1
关闭防火墙命令是:
systemctl disable firewalld && systemctl stop firewalld
selinux 临时关闭:setenforce 0
selinux 永久关闭:修改 /etc/selinux/config 这个文件,SELINUX=disabled
swap卸载,见本人博客:KVM虚拟机管理工作二(虚拟机磁盘优化,Centos进入dracut模式,报 /dev/centos/swap does not exist,如何恢复)_zsk_john的博客-CSDN博客_kvm虚拟机磁盘缩容量前言:KVM虚拟机的安装其实不是一个简单的事情,为什么要这么说呢?因为,KVM虚拟机在安装完毕后,我们可能会有很多定制化的需求,比如,更改虚拟机的root密码,安装一些常用软件,或者常用的软件环境。也会有扩容,缩容,增加逻辑盘以及打快照等等扩展需求。那么,KVM虚拟机的操作系统安装一般是什么要求呢?我想,第一,是需要最小化安装,这里最小化安装是为了降低KVM镜像的大小,使得镜像轻量化。第二,是关闭swap,因为很多环境是不能有swap的,相对于生产服务器来说,通常swap都是一个鸡肋的存在,并且https://blog.csdn.net/alwaysbefine/article/details/124831650这里是一个比较容易忽略的地方,卸载swap建议最好按照我的博客所写进行,否则会重新启动不了服务器。
七,升级内核
升级内核的原因是k8s运行在高版本内核下比较稳定,升级内核方法如下:
- rpm -ivh kernel-ml-5.16.9-1.el7.elrepo.x86_64.rpm
-
- grub2-set-default "CentOS Linux (5.16.9-1.el7.elrepo.x86_64) 7 (Core)"
-
- grub2-editenv list ## 查看内核启动项
六七步骤建议都完成后,统一重启服务器。三个节点都做。
八,
服务器之间的免密互信操作
九,docker环境的部署
这里需要说明一下,docker的版本是ce19. 03.9,该版本是和k8s的1.19.4版本适配的
一,
k8s集群规划,因此需要在环境变量内设定一个新变量,变量写在 /etc/profile 文件内,(三个服务器都要写)变量内容如下:
export no_proxy=localhost,127.0.0.1,dev.cnn,192.168.217.16,default.svc.cluster.local,svc.cluster.local,cluster.local,10.96.0.1,10.96.0.0/12,10.244.0.0/16
二,
k8s基本组件的安装:
k8s-1.19.4-offline这个文件夹内的k8s.tar.gz文件解压,然后将该解压目录挂载为本地仓库。
k8s-1.19.4-offline这个文件夹内的conntrack.tar.gz解压,然后执行命令 rpm -ivh * 安装,这个是k8s的强依赖。
检查本地仓库无误后执行以下命令进行安装:
yum install -y kubeadm-1.19.4 kubelet-1.19.4 kubectl-1.19.4
三,
镜像的导入:
k8s-1.19.4-offline这个文件夹内的master-images.tar.gz在16服务器解压,然后执行批量导入命令:for i in `ls master-images`;do docker load <$i;done
k8s-1.19.4-offline这个文件夹内的slave1-images.tar.gz在17服务器解压,然后执行批量导入命令:for i in `ls slave1-images`;do docker load <$i;done
k8s-1.19.4-offline这个文件夹内的slave2-images.tar.gz在18服务器解压,然后执行批量导入命令:for i in `ls slave2-images`;do docker load <$i;done
四,
k8s-1.19.4-offline这个文件夹内的kubeadm.zip在三个服务器都解压,然后,将可执行文件kubeadm-1.19.3移动到 /usr/bin/目录下,改名为kubeadm
修改kubeadm.conf 文件,重点修改如下内容:
- localAPIEndpoint:
- advertiseAddress: 192.168.217.16
- bindPort: 6443
- nodeRegistration:
- criSocket: /var/run/dockershim.sock
- name: zsk.cnn
- taints:
- - effect: NoSchedule
- key: node-role.kubernetes.io/master
五,
集群初始化,执行以下命令即可:
kubeadm init --config kubeadm.conf
如果初始化失败的话,可以使用命令 kubeadm reset 命令进行重置,不建议删除相关环境文件重做初始化,加入节点命令在此命令的末尾,复制该命令后在其它节点运行即可加入节点,不需要对此命令进行任何改动,如果加入集群失败,可同样使用kubeadm reset 命令重新恢复环境,再次加入。
注意,此命令是在master节点执行,命令成功执行完成后,输出有节点加入命令,复制节点加入命令,在其余两个节点执行即可。
此时的集群状态应该是noready,在主节点执行命令:kubectl apply -f kube-flannel.yml 集群状态即可恢复正常。
六,
安装kubernetes-dashboard
-
-
- mkdir /etc/kubernetes/pki/dashboard/
-
- cd /etc/kubernetes/pki/dashboard/
-
- openssl genrsa -out tls.key 2048
-
- openssl req -new -key tls.key -subj "/CN=zsk.cnn" -out tls.csr
-
- openssl x509 -req -days 3650 -in tls.csr -CA ../ca.crt -CAkey ../ca.key -CAcreateserial -out tls.crt
-
- kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/kubernetes/pki/dashboard/ -n kube-system
-
-
- kubectl apply -f dashboard.yml #安装dashboard
dashboard.yml文件的内容如下:
- [root@master YAML]# vim dash-ingress.yaml
-
- kind: Ingress
- apiVersion: extensions/v1beta1
- metadata:
- name: kubernetes-dashboard
- namespace: kubernetes-dashboard
- annotations:
- kubernetes.io/ingress.class: nginx
- nginx.ingress.kubernetes.io/backend-protocol: HTTPS
- nginx.ingress.kubernetes.io/rewrite-target: /
- nginx.ingress.kubernetes.io/ssl-redirect: 'true'
- nginx.ingress.kubernetes.io/use-regex: 'true'
- spec:
- tls:
- - hosts:
- - dash.zsk.cnn
- secretName: kubernetes-dashboard-certs
- rules:
- - host: dash.zsk.cnn
- http:
- paths:
- - path: /
- pathType: ImplementationSpecific
- backend:
- serviceName: kubernetes-dashboard
- servicePort: 443
输出如下:
secret/kubernetes-dashboard-certs created
#集群角色绑定
kubectl create clusterrolebinding default --clusterrole=cluster-admin --serviceaccount=kube-system:default --namespace=kube-system
输出如下为正确:
clusterrolebinding.rbac.authorization.k8s.io/default created
未完待续!!!!!!!!!