K8S集群的搭建
一、K8s简介
Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
通过Kubernetes你可以:
- 快速部署应用
- 快速扩展应用
- 无缝对接新的应用功能
- 节省资源,优化硬件资源的使用
Kubernetes 特点:
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化, 插件化, 可挂载, 可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
集群架构图:
二、安装部署
1.关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
2.关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
3.关闭swap:
swapoff -a
vim /etc/fstab
4.设置主机名:名字可以自己定义
hostname k8s-master
5.添加主机名与IP对应关系
vim /etc/hosts
在末尾增加如下信心,根据自己的ip和名称修改
10.2.150.20 k8s-master
10.2.150.9 k8s-node1
10.2.150.24 k8s-node2
10.2.150.17 k8s-node3
6.将桥接的IPv4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
7.安装Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
8.增加阿里云YUM源,方便下载镜像
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
9.安装kubelet、kubeadm和kubectl
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
systemctl enable kubelet.service
注意:以上9个步骤是在所有的节点都要执行的。
10.在Master节点上执行初始化操作
kubeadm init --apiserver-advertise-address=192.168.109.128 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
--apiserver-advertise-address改为主节点的ip,其他可以保持不变,主要是一些内存通信网络ip
初始化成功后提示执行如下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
初始化成功后会有一条join命令,先保存,不要执行
kubeadm join 10.2.150.20:6443 --token dd8xlg.xgoj9bpipsc8sgqq \
--discovery-token-ca-cert-hash sha256:5efa9c8ad644aa1af77c72f8a1c1a8b995e2e82e51b0e9728316af8e7bf127dc
如下图所示:
11.在Master节点上 安装pod网络插件CNI
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
此步骤会去拉取镜像,可能比较慢,也可以手动先拉取好
docker pull quay.io/coreos/flannel:v0.11.0-amd64
如果quay.io无法访问,可以使用别人共享的镜像
docker pull lizhenliang/flannel:v0.11.0-amd64
至此master节点安装完成
12.在Node节点上执行第10步的join命令,将节点加入集群中
kubeadm join 10.2.150.20:6443 --token dd8xlg.xgoj9bpipsc8sgqq --discovery-token-ca-cert-hash sha256:5efa9c8ad644aa1af77c72f8a1c1a8b995e2e82e51b0e9728316af8e7bf127dc
13.加入成功后,在master节点上执行
kubectl get nodes
查看集群节点情况
三、搭建可视化
1.在Master节点上下载kubernetes-dashboard.yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
下载修改端口配置
2.手动拉取镜像文件,国内镜像
docker pull lizhenliang/kubernetes-dashboard-amd64:v1.10.1
3.执行
kubectl apply -f
kubernetes-dashboard.yaml
4.创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
5.第四步执行完后生成token,复制token,在访问时输入令牌栏中,即可访问可视化界面
四、搭建分布式TensorFlow集群
1.在所有的节点上拉取镜像
docker pull tensorflow/tensorflow:1.13.0rc2-py3-jupyter
过程可能比较漫长,失败了重新拉取即可
2.TensorFlow集群需要用到NFS系统,网络文件共享系统,所以先安装NFS
3.在NFS节点上安装依赖,
yum -y install nfs-utils rpcbind
4.NFS的目录创建和配置
mkdir -p /root/data/nfs
vim /etc/exports
如下图:
5.启动nfs
systemctl start rpcbind.service
systemctl enable rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl status rpcbind.service
systemctl status nfs.service
6.验证nfs是否可用,在另一个节点上安装依赖
yum -y intall nfs-utils
showmount -e 10.2.150.20
mount -t nfs
10.2.150.20:/root/data/nfs
/mnt (挂载至本地/mnt目录)
挂在成功说明nfs已经配好了
7.在Master节点上新建编辑tf-ps.yaml
配置好nfs的ip地址和文件路径,镜像
kind: Deployment
metadata:
name: tensorflow-ps
spec:
replicas:
1
template:
metadata:
labels:
name: tensorflow-ps
role: ps
spec:
containers:
- name: ps
image: tensorflow/tensorflow:
1.13
.0rc2-py3-jupyter
ports:
- containerPort:
2222
resources:
limits:
cpu:
4
memory: 2Gi
requests:
cpu:
2
memory: 1Gi
volumeMounts:
- mountPath: /datanfs
readOnly:
false
name: nfs
volumes:
- name: nfs
nfs:
server:
10.2
.
150.20
path:
"/root/data/nfs"
---
apiVersion: v1
kind: Service
metadata:
name: tensorflow-ps-service
labels:
name: tensorflow-ps
role: service
spec:
ports:
- port:
2222
targetPort:
2222
selector:
name: tensorflow-ps
8.执行 kubectl create -f tf-ps.yaml服务
9.创建完成后可以通过 kubectl get pods,查看运行情况
下一篇: k8s HA 集群搭建