本文将讲述RedHat7.2如何安装和部署(单节/多节点)kubernetes。
注: 由于Redhat是商业系统,需注册才可用yum
进行软件安装,但是我们可以通过修改yum
为Centos源,具体操作
单节点
一、环境
一台安装RedHat7.2操作系统的物理机或虚拟机
二、准备工作
1、避免跟docker的iptables冲突,关闭RedHat防火墙
systemctl disable firewalld
systemctl stop firewalld
三、安装和配置
1、安装etcd
和kubernetes
yum -y install etcd kubernetes
以上命令会在安装kubernetes时自动安装docker
2、配置kubernetes apiserver(vi /etc/kubernetes/apiserver
)
将KUBE_ADMISSION_CONTROL
选项中的ServiceAccount
删除掉
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
3、配置docker并设置docker加速器
由于docker镜像下载模式是从docker hub下载的,非常慢,经常会连接请求超时,必须设置加速器。
我们可以到阿里云或者DaoCloud注册一个帐号认证登录后选择加速器,便会为我们生成专属加速器地址。我注册的是DaoCloud,类似这样http://xxxxxx.m.daocloud.io
。(不同系统下docker加速器的设置)
vi /etc/sysconfig/docker
把docker配置文件设置如下
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io --registry-mirror=http://a258bd15.m.daocloud.io'
4、按顺序启动所有相关服务
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
可以通过ps -ef | grep kub
来查看服务是否起来。到此,我们单机版(单节点)的kubernetes就部署完成了
多节点
一、环境
创建三台操作系统为RedHat7.2的虚拟机,其中一台用于master主机,另两台作为node。
假设:
master主机ip为:192.168.100.50
node1主机ip为:192.168.100.51
node2主机ip为:192.168.100.52
二、准备工作
1、设置hostname(主机名)
分别设置这三台虚拟机的主机名
hostnamectl set-hostname 主机名
Role | IP | HostName |
---|---|---|
Master | 192.168.100.50 | k8s-mst |
Node | 192.168.100.51 | k8s-nod1 |
Node | 192.168.100.52 | k8s-nod2 |
2、修改hosts文件
分别修改这三台虚拟机的hosts(vi /etc/hosts
)文件,都添加如下内容
192.168.100.50 k8s-mst
192.168.100.51 k8s-nod1
192.168.100.52 k8s-nod2
3、为避免和Docker的iptables产生冲突,关闭Node节点上的防火墙
systemctl stop firewalld
systemctl disable firewalld
4、为了让各个节点的时间保持一致,需要为所有节点安装NTP
yum -y install ntp
systemctl start ntpd
systemctl enable ntpd
三、安装和配置k8s-mst
1、安装kubernetes和etcd
yum -y install kubernetes etcd
查看所安装的版本
etcdctl - -version # etcdctl version: 3.0.15
kubectl - -version # Kubernetes v1.4.0
2、配置etcd(vi /etc/etcd/etcd.conf
)
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
3、配置kube-apiserver(vi /etc/kubernetes/apiserver
)
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
4、设置docker加速器
参考前面的单节点docker加速设置章节
5、启动etcd, kube-apiserver, kube-controller-manager和kube-scheduler
创建一个shell文件来启动这些服务
# file name: k8s-mst.sh
for SERVICE in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $SERVICE
systemctl enable $SERVICE
done
添加执行权限并执行启动服务
chmod 744 k8s-mst.sh
./k8s-mst.sh
可以通过ps -ef | grep kube
来查看服务是否启动成功
6、在etcd中配置flannel网络
etcdctl mk /flannel/network/config ‘{“Network”:”172.17.0.0/16”}’
四、安装配置NODE
1、在k8s-nod1和k8s-nod2上共同配置
1.1、安装kubernetes和flannel
yum -y install kubernetes flannel
查看安装的版本
flanneld –version # 0.5.5
1.2、配置flannel(vi /etc/sysconfig/flanneld
)
FLANNEL_ETCD_ENDPOINTS="http://192.168.100.50:2379"
FLANNEL_ETCD_PREFIX="/flannel/network"
FLANNEL_OPTIONS="--iface=enp0s3"
注:FLANNEL_OPTIONS
的值是该虚拟机的网卡名称(可用ip a
查看)
1.3、配置kubernetes(vi /etc/kubernetes/config
)
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.100.50:8080"
1.4、设置docker加速器
参考前面的单节点docker加速设置章节
2、仅在k8s-nod1的配置
配置kubelet(vi /etc/kubernetes/kubelet
)
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=k8s-nod1"
KUBELET_API_SERVER="--api-servers=http://192.168.100.50:8080"
3、仅在k8s-nod2的配置
配置kubelet(vi /etc/kubernetes/kubelet
)
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=k8s-nod2"
KUBELET_API_SERVER="--api-servers=http://192.168.100.50:8080"
4、在k8s-nod1和k8s-nod-2上启动flanneld, kube-proxy, kubelet和docker服务
依然创建一个shel文件来启动这些服务
# file name: k8s-node.sh
for SERVICE in flanneld kube-proxy kubelet docker; do
systemctl restart $SERVICE
systemctl enable $SERVICE
systemctl status $SERVICE
done
添加执行权限并执行
chmod 744 k8s-node
./k8s-node
当k8s-nod1和k8s-nod2两台虚拟机的相关服务起来后,我们在k8s-mst虚拟机上应该会看到这两个nodes
kubectl get nodes
输出如下
NAME STATUS AGE
k8s-nod1 Ready 3h
k8s-nod2 Ready 2h
到此,多节点环境搭建就完成了。
五、增删节点
1、删除节点
方法一:
对节点进行集群调度隔离
# file name: unschedule_node.yaml
apiVersion: v1
kind: Node
matadata:
name: k8s-nod1
labels:
kubernetes.io/hostname: k8s-nod1
spec:
unschedulable: true
kubectl replace -f unschedule_node.yaml
或不用配置文件
kubectl patch node k8s-nod1 -p ‘{“spec:”:{“unschedulable”:true}}’
或
kubectl cordon k8s-nod1
注:将某node进行调度隔离时,运行在该node上的pod并不会自动停止运行,需要人为手动将pod停止
方法二:直接删除该节点:
kubectl delete node k8s-nod1
2、增加节点
方法一:
恢复隔离调度的node
kubectl uncordon k8s-nod1
方法二:
增加新的物理node机到k8s集群中,操作看上面的步骤: 四、安装配置NODE