Ubuntu 18.04安装单master K8s集群

一、基本概念

  1. kubernetes是什么?
    Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。K8S用于容器化应用程序的部署,扩展和管理。 K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。Kubernetes目标是让部署容器化应用简单高效。
    官方网站
  2. Kubernetes特性
    自我修复
    弹性伸缩
    自动部署和回滚
    服务发现和负载均衡
    机密和配置管理
    存储编排
    批处理
  3. Kubernetes集群架构与组件
    Ubuntu 18.04安装单master K8s集群_第1张图片
  4. Master组件
  • kube-apiserver
    Kubernetes API,集群的统一入口,各组件协调者,以 restful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
  • kube-controller-manager
    处理集群中常规后台任务,一个资源对应一个控制器,而ControllerMana-ger就是负责管理这些控制器的。
  • kube-scheduler
    根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
  • etcd
    分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息
  1. Node组件
  • Kubelet
    kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
  • kube-proxy
    在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
  • docker或rocket
    容器引擎,运行容器。
  1. Pod
    最小部署单元
    一组容器的集合
    一个Pod中的容器共享网络命名空间
    Pod是短暂的

二、前期准备

  1. K8S平台规划 – 单Master集群
    Ubuntu 18.04安装单master K8s集群_第2张图片
    物理资源充足的话尽量多master、多node节点部署,我这里仅以单master节点、单node节点两台计算机来部署。
    2. 平台集群规划
    Ubuntu 18.04安装单master K8s集群_第3张图片
      服务器硬件配置推荐 :
    Ubuntu 18.04安装单master K8s集群_第4张图片
    3. 官方提供的三种部署方式
  • minikube
    Minikube是一中部署工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes
    部署地址:https://kubernetes.io/docs/setup/minikube/
  • kubeadm
    Kubeadm也是部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
    部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
  • 二进制
    推荐,从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
    下载地址:https://github.com/kubernetes/kubernetes/releases
    本文采用的是官方提供的工具Kubeadm来搭建

三、初始化两个节点

  1. 在两台虚拟机或物理机上都安装ubuntu18.04操作系统,主机名分别为k8s-master、node,IP可根据自己实际网络配置,确保两节点在互通即可。虚拟机上的网络配置可参考网络配置,更新为国内源。
  2. 配置名称解析
    在master节点, vim /etc/hosts, 添加:
   192.168.105.6	k8s-master
   192.168.105.7	node

在这里插入图片描述
同样在node节点,添加:

 	192.168.105.7	node
	192.168.105.6	k8s-master

在这里插入图片描述

  1. 禁止swap分区, 两节点都禁止
    vim /etc/fstab, 把swap分区那一行注释掉:
    Ubuntu 18.04安装单master K8s集群_第5张图片
  2. 关闭防火墙,两节点都禁止
 root@k8s-master:~# ufw disable 	//关闭防火墙
 root@k8s-master:~# ufw status  	//查看防火墙状态
  1. 安装docker,两节点都安装,具体安装可参见 ubuntu18.04 docker安装,建议配置镜像加速器
  2. 配置时间同步
    选择k8s-master节点作为服务端,node节点作为客户端
    (1) k8s-master节点
	apt-get install chrony -y
	vim /etc/chrony/chrony.conf
	#修改三项
		server 127.127.1.0 iburst
		allow 192.168.105.0/24
		local stratum 10
	systemctl start chronyd
	systemctl enable chronyd 	#开机自启动

Ubuntu 18.04安装单master K8s集群_第6张图片

    (2) node节点

	apt-get install chrony -y
	vim /etc/chrony/chrony.conf
	#修改一项
		server 192.168.105.6 iburst
	systemctl start chronyd
	systemctl enable chronyd 	#开机自启动

在这里插入图片描述
    (3) 可以在两节点运行,chronyc sources查看同步信息
Ubuntu 18.04安装单master K8s集群_第7张图片
四、使用kubeadm安装(k8s-master节点)

  1. 直接运行以下几条命令安装
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
#新增源
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt-get update
apt install -y kubelet=1.15.4-00 kubectl=1.15.4-00 kubeadm=1.15.4-00        //安装指定的版本
  1. 配置kubelet禁用swap
tee /etc/default/kubelet <<-'EOF'
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF
  1. 运行:systemctl daemon-reload && systemctl restart kubelet
  2. 初始化k8s,运行以下命令
kubeadm init \
  --kubernetes-version=v1.15.4 \
  --image-repository registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=Swap

执行成功会显示initialized sucessfully!,之前安装忘了截图,在网上找了一张,可以参考一下。
Ubuntu 18.04安装单master K8s集群_第8张图片
上图显示,在开始使用集群前,还要进行以下配置:

root@k8s-master:~# mkdir -p $HOME/.kube
root@k8s-master:~# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master:~# chown $(id -u):$(id -g) $HOME/.kube/config

进行网络插件安装前,先配置名称解析,防止访问不了:
vim /etc/hosts,添加

199.232.68.133		raw.githubusercontent.com

安装 pod 网络插件 flannel(可用 wget 把 github 把文件下载到本地)

root@k8s-master:~# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created
root@k8s-master:~#
root@k8s-master:~# kubectl get pods -A
NAMESPACE     NAME                                 READY   STATUS     RESTARTS   AGE
kube-system   coredns-bccdc95cf-lnbl9              0/1     Pending    0          2m52s
kube-system   coredns-bccdc95cf-zr8bk              0/1     Pending    0          2m52s
kube-system   etcd-k8s-master                      1/1     Running    0          2m8s
kube-system   kube-apiserver-k8s-master            1/1     Running    0          2m10s
kube-system   kube-controller-manager-k8s-master   1/1     Running    0          2m7s
kube-system   kube-flannel-ds-amd64-wpj2p          0/1     Init:0/1   0          12s     //如果拉取不下来,自己pull就可以
kube-system   kube-proxy-dt9p4                     1/1     Running    0          2m51s
kube-system   kube-scheduler-k8s-master            1/1     Running    0          2m12s

(安装时需要下载镜像 quay.io/coreos/flannel:v0.11.0-amd64,具体的镜像见 kube-flannel.yml 文件,如果下载失败则到 quay-mirror.qiniu.com 下载,并重新打回 tag)

docker pull quay.io/coreos/flannel:v0.11.0-amd64

查看节点状态,为 ready,查看集群状态,各服务正常

kubectl get cs

在这里插入图片描述
允许 master 部署 pod:

kubectl taint nodes --all node-role.kubernetes.io/master-

在这里插入图片描述
查看系统状态:kubectl get pods -n kube-system
Ubuntu 18.04安装单master K8s集群_第9张图片
五、node节点部署并加入

  1. node节点安装 k8s 组件
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
#新增源
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
apt-get update
apt install -y kubelet=1.15.4-00 kubectl=1.15.4-00 kubeadm=1.15.4-00        //安装指定的版本
  1. 配置kubelet禁用swap
tee /etc/default/kubelet <<-'EOF'
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF
  1. 运行:systemctl daemon-reload && systemctl restart kubelet
  2. 加入 node节点,需要 k8s 的token 和证书的 sha256 ,在前面master节点执行 kubeadm init 命令后提示的输出里面有对应的 token 和证书:
kubeadm join 192.168.105.6:6443 --token pk2rf8.neqrlzq4ls4kxcji \
    --discovery-token-ca-cert-hash sha256:c3722c537d6e7e3774cc8e817ad1462da7e9e62eb83656afd8efa7ed4a2b02c0
  1. 但是 token 有效期为 24 小时,超时需要重新创建,超时的话参考以下部分:
kubeadm token list  # 查看 token
kubeadm token create --print-join-command   # 创建 token 并打印 join 命令

或通过 openssl 获得证书的 sha256:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

加入到集群:

kubeadm join 192.168.105.6:6443 --token  \
    --discovery-token-ca-cert-hash sha256:<证书sha256> 
  1. 查看状态:kubectl get nodes
    在这里插入图片描述
    发现连接服务器遭到拒绝,出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决办法如下,将master节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:
scp /etc/kubernetes/admin.conf bryou@192.168.105.7:/etc/kubernetes	//在master节点执行
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 	//在node节点执行
source ~/.bash_profile	//在node节点执行,使之立即生效

再运行kubectl命令就成功了:
在这里插入图片描述
在这里插入图片描述
六、部署WebUI — kuboard

  1. 部署web界面有两种方式:
    官方:kubernetes dashboard
    第三方:kuboard
    本文采用第三方的部署方式
  2. 部署 kuboard,首先下载第三方包,可以去官网下载,一个是安装包kuboard-1.tar.gz , 一个是yaml配置文件,start_kuboard.yaml,或者可去我网盘下载:
    链接:https://pan.baidu.com/s/1gJt2jDdcIEtxli_lUl4pwg
    提取码:6fta
  3. 把下载的kuboard-1.tar.gz上传到node节点,再导入为docker镜像:
	docker load -i kuboard-1.tar.gz		

Ubuntu 18.04安装单master K8s集群_第10张图片
    4. 把下载的 start_kuboard.yaml 上传到master节点,编辑yaml配置文件,修改一行,指定希望kuboard运行在哪个节点:nodeName: node
Ubuntu 18.04安装单master K8s集群_第11张图片
执行yaml对资源进行配置: kubectl apply -f start_kuboard.yaml
Ubuntu 18.04安装单master K8s集群_第12张图片
查看一下状态:kubectl get pods -n kube-system
Ubuntu 18.04安装单master K8s集群_第13张图片
查看一下kuboard的暴露的端口:kubectl get svc -n kube-system
在这里插入图片描述
发现Kuboard端口为32567

    5. 在浏览器登录:http://192.168.105.7:32567/,注:地址为部署kuboard组件的节点地址,这里相应的为node节点IP,发现需要输入token,在master节点运行以下命令获取token:

kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d

在这里插入图片描述
输入token登录,web界面如下:
Ubuntu 18.04安装单master K8s集群_第14张图片
在kubernetes-ui上执行yaml文件,简单快捷,历经坎坷算是简陋搭建完了,下一步准备搭建高可用k8s集群

六、小结 && 参考资料

本文快速地介绍了一下Kubernetes的核心构成组件及其作用,然后通过在两台真实服务器上通过Kubeadm搭建了一个Master节点一个Node节点的集群,最后验证了一下集群是否可用。

  • CloudMan,《每天5分钟玩转Kubernetes》
  • 李振良,《30分钟部署一个Kubernetes集群》
  • 李振良,《一天入门Kubernets教程》
  • mvpBang
  • drop *

你可能感兴趣的:(ubuntu,docker,容器,运维,服务器)