本文將講述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