在Centos7.6使用kubeadm部署k8s 1.14.3
K8s不是一个软件,而是一堆软件的集合,由于这堆软件各自独立,因此可能k8s安装过程很容易出现问题
K8s部署有多种方式,本文使用kubeadm部署,从易操作性和可控性来说属于中等的方式
环境:centos7.6,k8s 1.14.3
K8s安装前设置
以下操作在所有节点操作(也就是master1和node1)
关闭防火墙、selinux和swap,分别运行:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
PS:生产环境在安装完k8s后要考虑网络安全(例如防火墙开启)的方案,本文没对此说明
配置内核参数,将桥接的IPv4流量传递到iptables的链,新建或修改文件/etc/sysctl.d/k8s.conf,文件内容如下:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
运行sysctl --system
配置国内yum源,分别运行:
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
配置国内Kubernetes源,新建或修改文件/etc/yum.repos.d/kubernetes.repo,文件内容如下:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
配置 docker 源,运行:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
安装kubeadm、kubelet、kubectl
以下操作在所有节点操作(也就是master1和node1)
运行yum install -y kubelet-1.14.3 kubeadm-1.14.3 kubectl-1.14.3,安装k8s 3大组件。
其中,Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。
运行systemctl enable kubelet,设置kubelet开机运行
部署master节点
以下操作在master1做
进行Kubernetes集群初始化,运行:
kubeadm init --kubernetes-version=1.14.3 --apiserver-advertise-address=192.168.31.141 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
其中kubernetes-version参数是k8s版本
apiserver-advertise-address是master节点的ip
pod-network-cidr是定义POD的网段(不用想这个网段是否存在,因为这是k8s的内部虚拟的网络)
PS:kubeadm init很容易出错,如果出错可以运行kubeadm reset重置,然后就可以重新kubeadm init
PS:这里会卡很久,请耐心等待
成功的样子,注意要把kubeadm join这段话拷出来,后面node加入集群会用到
配置kubectl工具,分别运行:
mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
然后运行kubectl get nodes可以查看到k8s集群的所有节点,可见有master节点
PS:在实际操作中发现,节点加入集群后,其status要等几分钟才变成ready(ready说明正常)
部署flannel网络,运行:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
部署node节点
以下操作在node1做
之前kubeadm init成功后有一段话要拷出来,现在可以运行他,这是让node加入集群
集群状态检测
以下操作在master1做
运行kubectl get nodes,可见node1已加到集群
PS:在实际操作中发现,节点加入集群后,其status要等几分钟才变成ready(ready说明正常)
创建Pod(以nginx为例,注意这会占用80端口)以验证集群是否正常,分别运行:
PS:此操作不是必须,有信心的可以不做,避免多装东西
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
成功的样子
部署Dashboard
Dashboard是k8s自带的查看k8s集群运行信息的图形界面软件
PS:注意只可以查看而不能操作
以下操作在master1做
创建Dashboard的yaml文件,分别运行:
PS:其中的30001是Dashboard的端口
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml
sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml
部署Dashboard,分别运行:
kubectl create -f kubernetes-dashboard.yaml
创建完成后,检查相关服务运行状态,分别运行:
kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system
netstat -ntlp|grep 30001
成功的样子
创建一个用于Dashboard的用户以及获取用户的令牌(token),分别运行:
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}')
当运行最后一行,有输出token,注意token要保存好
使用firefox(注意chrome和ie都不行)访问https://192.168.31.141:30001/(ip是master1的),中途有什么危险警告都点通过,直到下图
PS:令牌就是上面的token的值
看到下图说明Dashboard部署成功,也说明k8s部署成功