軟件鏈接
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
修改/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
此時執(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
使用之前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