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节点)
hostname
vi /etc/hostname
在vi中编辑hostname之后输入:wq保存,之后重启系统即可。
关闭防火墙
systemctl stop firewalld
systemctl 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 lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
systemctl start docker.service
systemctl enable docker.service
添加K8s 国内镜像源
cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF
安装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 \
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/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo 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-command
kubeadm 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进行咨询。