K8S集群搭建

軟件鏈接

鏈接:https://pan.baidu.com/s/1iQJpKZ9PdFjhz9yTgl0Wjg?密碼:gwmh

1、環(huán)境準(zhǔn)備

準(zhǔn)備3臺虛擬機(jī)。 1臺 master,其余的做node.

(1)修改主機(jī)名

hostnamectl set-hostname master1 #master1執(zhí)行

hostnamectl set-hostname node1 #node1執(zhí)行

hostnamectl set-hostname node2#node2執(zhí)行

(2)hosts解析

在所有節(jié)點(diǎn)/etc/hosts中添加解析,master1,node1,node2

10.10.0.216 matser1

10.10.0.215 node1

10.10.0.214 node2

(3)關(guān)閉所有節(jié)點(diǎn)的seliux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

setenforce 0

(4)關(guān)閉所有節(jié)點(diǎn)的firewalld

systemctl disable firewalld

systemctl stop firewalld

(5)進(jìn)程及文件句柄參數(shù)

修改/etc/security/limits.conf 配制文件,加大打開文件句柄數(shù)(weblogic應(yīng)用使用到)

vi /etc/security/limits.conf

* hard nofile 102400

* soft nofile 102400

* hard nproc 2067531

* soft nproc 2067531

修改完后,exit退出,重新登錄,用ulimit -a 命令查看一下open files、max user processes的值。

(6)用戶進(jìn)程參數(shù)優(yōu)化

修改/etc/security/limits.d/90-nproc.conf配制文件,加大用戶進(jìn)程數(shù)(max user processes)。

vi /etc/security/limits.d/20-nproc.conf

* soft nproc 2067531

* hard nproc 2067531

2、安裝docker

(1)使用文件docker-packages.tar,每個節(jié)點(diǎn)都要安裝。

tar -xvf docker-packages.tar

cd docker-packages

rm -rf audit-* libsemanage*

rm -rf policycoreutils-*

yum install audit-libs-python

yum install libsemanage-python

?yum install local *.rpm 進(jìn)行安裝

docker version #安裝完成查看版本

(2)啟動docker,并設(shè)置為開機(jī)自啟

systemctl start docker && systemctl enable docker

輸入docker info,==記錄Cgroup Driver==

Cgroup Driver: cgroupfs

docker和kubelet的cgroup driver需要一致,如果docker不是cgroupfs,則執(zhí)行

cat << EOF > /etc/docker/daemon.json

{

"exec-opts": ["native.cgroupdriver=cgroupfs"]

}

EOF

systemctl daemon-reload && systemctl restart docker

(3)安裝kubeadm,kubectl,kubelet

使用文件kube-packages-1.10.1.tar,每個節(jié)點(diǎn)都要安裝

kubeadm是集群部署工具

kubectl是集群管理工具,通過command來管理集群

kubelet的k8s集群每個節(jié)點(diǎn)的docker管理服務(wù)

tar -xvf kube-packages-1.10.1.tar

cd kube-packages-1.10.1

yum install local *.rpm 進(jìn)行安裝

在所有kubernetes節(jié)點(diǎn)上設(shè)置kubelet使用cgroupfs,與dockerd保持一致,否則kubelet會啟動報(bào)錯

默認(rèn)kubelet使用的cgroup-driver=systemd,改為cgroup-driver=cgroupfs

sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

重設(shè)kubelet服務(wù),并重啟kubelet服務(wù)

systemctl daemon-reload && systemctl restart kubelet

(4)關(guān)閉swap,及修改iptables,不然后面kubeadm會報(bào)錯

swapoff -a

vi /etc/fstab #swap一行注釋

cat <<EOF > /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

sysctl --system

(5)導(dǎo)入鏡像

使用文件k8s-images-1.10.tar.gz,每個節(jié)點(diǎn)都要執(zhí)行

節(jié)點(diǎn)較少,就不搭建鏡像倉庫服務(wù)了,后續(xù)要用的應(yīng)用鏡像,每個節(jié)點(diǎn)都要導(dǎo)入

docker load -i k8s-images-1.10.tar.gz

3、kubeadm init 部署master節(jié)點(diǎn)

只在master執(zhí)行。此處選用最簡單快捷的部署方案。etcd、api、controller-manager、 scheduler服務(wù)都會以容器的方式運(yùn)行在master。etcd 為單點(diǎn),不帶證書。etcd的數(shù)據(jù)會掛載到master節(jié)點(diǎn)/var/lib/etcd

init部署是支持etcd 集群和證書模式的,配置方法見我1.9的文檔,此處略過。

(1)Init部署master

init命令注意要指定版本,和pod范圍

kubeadm init --kubernetes-version=v1.10.1 --pod-network-cidr=10.244.0.0/16

(2)保存kubeconfig

執(zhí)行提示的命令,保存kubeconfig

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

(3)查看node

此時執(zhí)行kubectl get node 已經(jīng)可以看到master節(jié)點(diǎn),notready是因?yàn)檫€未部署網(wǎng)絡(luò)插件

[root@master1 kubernetes1.10]# kubectl get node

(4)查看所有的pod

查看所有的pod,kubectl get pod --all-namespaces

kubedns也依賴于容器網(wǎng)絡(luò),此時pending是正常的

配置KUBECONFIG變量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile

source /etc/profile

echo $KUBECONFIG #應(yīng)該返回/etc/kubernetes/admin.conf

4、部署flannel網(wǎng)絡(luò)

k8s支持多種網(wǎng)絡(luò)方案,flannel,calico,openvswitch

此處選擇flannel。 在熟悉了k8s部署后,可以嘗試其他網(wǎng)絡(luò)方案,我另外一篇1.9部署中有介紹flannel和calico的方案,以及切換時需要的動作。

kubectl apply -f kube-flannel.yml

網(wǎng)絡(luò)就緒后,節(jié)點(diǎn)的狀態(tài)會變?yōu)閞eady

[root@master1 kubernetes1.10]# kubectl get node

NAME STATUS ROLES AGE VERSION

master1 Ready master 18m v1.10.1

5、kubeadm join 加入node節(jié)點(diǎn)

(1)node節(jié)點(diǎn)加入集群

使用之前kubeadm init 生產(chǎn)的join命令,加入成功后,回到master節(jié)點(diǎn)查看是否成功

sudo kubeadm join 192.168.59.137:6443 --token rm741h.6qw710l74gjf3ezf --discovery-token-ca-cert-hash sha256:ccdf24da7396f55bcf2d89ba4ba13a2834db4253584700a7dc0576bf18daf2bb --ignore-preflight-errors=‘swap‘ --ignore-preflight-errors=‘cri‘

[root@master1 kubernetes1.10]# kubectl get node

(2)如果忘了join命令,加入節(jié)點(diǎn)方法

若node已經(jīng)成功加入,忽略這一步。

使用場景:忘了保存上面kubeadm init生產(chǎn)的join命令,可按照下面的方法加入node節(jié)點(diǎn)。

首先master節(jié)點(diǎn)獲取token,如果token list內(nèi)容為空,則kubeadm token create創(chuàng)建一個,記錄下token數(shù)據(jù)

[root@master1 kubernetes1.10]# kubeadm token list

5、部署k8s ui界面,dashboard

dashboard是官方的k8s 管理界面,可以查看應(yīng)用信息及發(fā)布應(yīng)用。dashboard的語言是根據(jù)瀏覽器的語言自己識別的

官方默認(rèn)的dashboard為https方式,如果用chrome訪問會拒絕。本次部署做了修改,方便使用,使用了http方式,用chrome訪問正常。

一共需要導(dǎo)入3個yaml文件

kubectl apply -f kubernetes-dashboard-http.yaml

kubectl apply -f admin-role.yaml

kubectl apply -f kubernetes-dashboard-admin.rbac.yaml

創(chuàng)建完成后,通過 http://任意節(jié)點(diǎn)的IP:31000即可訪問ui

FAQ

重置kubernetes服務(wù),重置網(wǎng)絡(luò)。刪除網(wǎng)絡(luò)配置,link

kubeadm reset

systemctl stop kubelet

systemctl stop docker

rm -rf /var/lib/cni/

rm -rf /var/lib/kubelet/*

rm -rf /etc/cni/

ifconfig cni0 down

ifconfig flannel.1 down

ifconfig docker0 down

ip link delete cni0

ip link delete flannel.1

systemctl start docker

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容