30分钟无坑部署K8S单Master集群

Jesse导读:11月9号,我在中国.NET开发者峰会(.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验,在10号的时候又联合张善友、陈计节两位大佬一起做了一个6个小时的动手实践,得到了非常好的反馈。学习K8S需要首先拥有一个K8S的操作环境,由于它的复杂性以及不可描述的原因导致这很多同学直接被卡在了这里。redz(人称小红)是我们团队中的成员之一,这篇文章是他在自己用VMWare虚拟机上搭了3台虚拟机并且在这3台虚拟机上搭建K8S 1.16版本的过程 。

相关环境

  • CentOS 7.6 (2-3台)
  • K8s 1.16.2
  • Docker 18.09.3

需要自己准备2-3台虚拟机来安装CentOS7.6系统,在开始之前先修改主机名称(主机名称不能重复-如果重复即使work节点加入成功,master看不到work节点)

hostnamevi /etc/hostname

在vi中编辑hostname之后输入:wq保存,之后重启系统即可。

关闭防火墙

systemctl stop firewalldsystemctl disable firewalld

禁用swap

swapoff -a
  • 修改etc/fstab
  • 在行首加 #,注释/dev/mapper/centos-swap swap

安装Docker

  • k8s支持的Docker版本

sudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.iosystemctl start docker.servicesystemctl enable docker.service

添加K8s 国内镜像源

cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF[kubernetes]name=Kubernetes Repobaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgEOF
安装K8s所需要的3个组件
yum install -y kubeadm  kubelet kubectl

设置k8s开机自启动


systemctl enable kubelet.service

K8s集群

创建K8s集群 Master Node

在master节点上执行以下命令


kubeadm init --image-repository registry.aliyuncs.com/google_containers \    --pod-network-cidr=10.244.0.0/16 \    --ignore-preflight-errors=cri \    --kubernetes-version=1.16.2
  • 输出以下信息表示,K8s与Docker版本不一致
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.4. Latest validated version: 18.09

  • 输出以下信息表示,swap没有被禁用
[ERROR Swap]: running with swap on is not supported. Please disable swap

  • 输出以下信息表示,请执行echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
  • 安装成功后, 会显示如下的信息 按步执行即可

mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config

Init Network Flannel 初始化网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 由于某种不可抗力 请先下载yml至本机后执行 kubectl apply -f kube-flannel.yml

加入K8s集群 Slave Node

  • 对于从节点 执行步骤至安装K8s 无需init
  • 在master节点上执行, 获取join-token
kubeadm token create --print-join-commandkubeadm join 192.168.69.128:6443 --token uc826o.l9na62a2ckmf5rjo --discovery-token-ca-cert-hash sha256:2be9656d7b4c3e9aab2b1259b0eea948f0b0b05d082267aa5676967cc495c168
  • 从节点执行join-token

K8s集群相关命令

  • 集群获取节点 kubectl get nodes
  • 集群删除节点 kubectl delete node <node-name>
  • 被删除的节点重新加入集群 先执行 kubeadm reset

 

K8s UI kubernetes-dashboard

部署yaml

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
  • 此部署文档镜像来源于docker hub
  • 假设部署文档由于众所周知的原因不可访问 请先通过技术手段获取文档后执行部署命令
kubectl apply -f recommended.yaml
  • 使用NodePort方式暴露30065端口 用于非k8s节点中访问 修改yaml以下内容 重新执行部署命令
 kind: Service apiVersion: v1 metadata:   labels:     k8s-app: kubernetes-dashboard   name: kubernetes-dashboard   namespace: kubernetes-dashboard spec:   type: NodePort  ports:    - port: 443      targetPort: 8443      nodePort: 30065  selector:      k8s-app: kubernetes-dashboard
  • NodePort方式默认端口范围30000-32767
  • 获取kubernetes-dashboard访问token
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
  • 在firefox中访问该网址 https://[k8s节点]:30065选择token登录并输入访问token
  • kubernetes-dashboard要求使用HTTPS Chrome不能访问此类没有认证的web,可以使用firefox进入访问

本机添加kubectl

在windows安装 kubectl

1:choco install kubernetes-cli

2:在master 主机上进入/etc/kubernetes/admin.conf 把admin.conf 下载下来,拷贝到本机当前用户的 .kube\config里面 如果当前用户下没有.kube 使用powershell 建立一个文件夹和config里面
ASP.NET Core微服务 on K8S

如果你对asp.net core微服务和k8s感兴趣,可以看看我录制的视频。涉及到K8S管理、微服务设计以及一些中间件在k8s上的运维,点击左下角的【阅读原文】查看详情。 如果有疑问也可以添加我的微信:280113562进行咨询。