CentOS7 安装K8S的两种方案

最近在学习K8s的知识,从最原始的安装k8s集群开始 。上一篇文章已经介绍了在VirtualBox下安装虚拟机和如何分配k8s集群的IP地址,这一章主要介绍在虚拟机上安装k8s的两种方法 。
如何安装,遇到问题如何解决,在网上的一搜就大把资源,包括k8s官网,但是很多时候都不能解决问题,因为k8s的版本很多,从1.5.2到最新的1.18.6,安装的linux系统有Ubuntu,centos,Fedroa的等等,各种平台的问题不一样,解决方法也很多 。
笔者经过一段时间的摸索,经过实践,总结出两种安装k8s集群的方法,供大家参考 。
使用kubernetes-master和kubernetes-node的安装方法,简单便捷,缺点是安装的版本比较低,不是最新的,比如1.5.2 。使用Docker镜像,安装和运行包括etcd,flannel,pause,kube-apiserver,controller-manager,scheduler等方法 。能使用最新的,稳定的版本,比如1.18.6 。
这两种方法都是选择CentOS7操作系统,原因有:
1.CentOS7和Fedora32稳定,可提供安装的软件稳定而且丰富 。
2.CentOS8,Fedoar33经过尝试,k8s目前上没有稳定的安装包 。
3.Ubuntu,对于承载集群服务,还是比不上CentOS 。
k8s集群IP地址分配可以参考笔者上一篇文章 。
准备至少两个节点,一个是master,一个是node 。在VirtualBox上安装CentOS7之后,分配几个IP地址:一个是Host-Only类型的IP地址,192.168.56.xx,这个是用来从host主机登陆到节点的地址;另外一个是internal network类型的IP地址,10.0.20.101,是用来配置k8s节点之间服务通信的地址 。当然还有其他两类IP地址,比如NAT和Bridge地址,NAT地址对于所有VirtualBox的机器来说都是一个固定的地址10.0.2.15,不能用来配置k8s集群;Bridge地址随着接入网络(无线wifi,有线光线等)地址都不是固定的,所以最好不要用来配置k8s使用 。
第一种安装k8s的方法:使用kubernetes-master和kubernetes-node安装包,k8s的基础软件直接安装到虚拟机运行 。但是目前只有1.5.2的版本安装是比较顺利的 。最新的1.18.6与1.5.2比较的差别还是挺大的,不管从配置,使用都是有挺大的区别,笔者并不建议使用1.5的版本使用,用来学习的话,还是可以的 。
k8s集群IP地址
主机名字 Host-Only地址 Internal Network地址
k8smaster 192.168.56.101 10.0.20.101
k8snode1 192.168.56.102 10.0.20.102
k8snode2 192.168.56.103 10.0.20.103
步骤一:系统基本配置master和node节点都需要执行 。
安装epel-release源
# yum -y install epel-release
所有机器关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
步骤二:master节点安装配置使用yum安装etcd、kubernetes-master
# yum -y install etcd kubernetes-master
配置文件vim /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="default"
#[Clustering]
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.56.101:2379"
配置文件vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
KUBE_API_ARGS=""
在etcd中定义flannel网络插件,以便k8s节点之间通信
# etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
启动etcd、kube-apiserver、kube-controller-manager、kube-scheduler并配置开机启动服务 。
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES; done
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; systemctl enable $SERVICES; done
步骤三:node节点安装配置# yum -y install flannel kubernetes-node
配置文件vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.56.101:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
配置文件vim /etc/kubernetes/config
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.56.101:8080"
配置文件vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"


推荐阅读