SpringCloud + Docker+ K8s微服务集群部署

安装 K8s v18.4

准备两台机器,一台做master,一台做node
1.配置yum源(两台机器都做)

cd /etc/yum.repos.d/ 
rm -f \* 
curl -o CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo 
curl -o docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.安装docker并设置开启启动(两台机器都做)
yum install -y docker-ce
systemctl enable docker && systemctl start docker

3.安装kubeadm并设置开启启动,实际上是会自动安装kubelet、kubeadm、kubectl三个(两台机器都做)
yum install -y kubeadm
systemctl enable kubelet && systemctl start kubelet

4.初始化kubeadm(只在master机器执行),注意apiserver-advertise-address的ip改成自己的master节点ip,最好ping一下看看有没有通,复制最后的kubeadm join 192.168.71.60:6443 --token...后续会用到
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.71.60 --image-repository mirrorgcrio --service-cidr=10.1.0.0/16
这里有个很诡异的BUG,笔者曾经困住这一步好几天,就是这个问题https://github.com/kubernetes...
新版本的移除了kubernetes-cni组件,但是新版本国内镜像较少,于是需要下老版本,但是老版本又说没有这个kubernetes-cni,导致很尴尬。最后找到了个能用的镜像mirrorgcrio仓库终于下好了。

5.执行完上面命令后,根据输出提示执行下面语句(只在master机器执行
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

6.安装网络插件(master)
下载文件
https://github.com/WillLiaowh...
执行文件
kubectl apply -f kube-flannel.yml

7.将node加入集群,token要根据上面4步骤安装完的提示(在node上操作)

kubeadm join 192.168.71.60:6443 --token y58e7a.c938uwuaz1fbeeys \
    --discovery-token-ca-cert-hash sha256:fc18a5172423e70b915158ea34a2101284b3ee98c86cba79bcafadb691f75942

8.查看node,看到master节点和node节点都是ready就对了
kubectl get node

部署微服务

这里笔者准备了三个微服务,一个consumer,一个provider,一个eureka,目的是consumer和provider都注册进eureka,最后实现从consumer调起provider的接口。
通常将一个服务部署到k8s的流程是这样的:
1.用Maven打包成jar
2.生成docker镜像
3.将生成的镜像push到docker镜像库
4.用kubectl将镜像发布到K8S集群
这里笔者直接用eureka来举例,后续的consumer和provider都是一样的部署流程。
1.Maven打出一个微服务的可执行jar
2.生成docker镜像,首先编辑一个Dokerfile

FROM hub.c.163.com/library/java:latest
ADD cloud-eureka-server7001-1.0-SNAPSHOT.jar eureka7001.jar
EXPOSE 7001
ENTRYPOINT ["java", "-jar", "/eureka7001.jar"]

将jar和Dokerfile放在同一个层级目录,执行

docker build -t eureka7001:0.0.1 .

3.将生成的镜像push到docker镜像库,这里我用了阿里云的镜像服务,主要方便,不用搞那么多有的没的
步骤是
3.1.登录 docker login
3.2.改tag docker tag
3.3.push到镜像仓库 docker push
最终效果是这样:SpringCloud + Docker+ K8s微服务集群部署_第1张图片

4.用kubectl将镜像发布到K8s集群,首先编辑一个Deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eureka7001
  labels:
    app: eureka7001
spec:
  replicas: 1
  selector:
    matchLabels:
      app: eureka7001
  template:
    metadata:
      labels:
        app: eureka7001
    spec:
      containers:
      - name: eureka7001
        image: registry.cn-hangzhou.aliyuncs.com/willliaowh/eureka7001:0.0.1
        ports:
        - containerPort: 7001

---
kind: Service
apiVersion: v1
metadata:
  name: eureka7001
  labels:
    app: eureka7001
spec:
  selector:
    app: eureka7001
  ports:
  - port: 7001
    targetPort: 7001
    
"Deployment.yaml" 38L, 620C

注意image要改成自己的镜像地址,然后执行以下命令
kubectl apply -f Deployment.yaml
一切顺利的话可以执行下面命令,看到eureka已经运行起来了
kubectl get svc,deploy,pod
后续的consumer和provider都是一样的部署流程,要注意的是eureka的注册地址是kubectl get svc看到的CLUSTER-IP + Port,听说直接用服务名 + port也可以。

安装ingress

一切顺利的话三个服务应该都部署成功
1594365339377.jpg
但现在问题是怎么访问,这就需要用到ingress做一个反向代理访问service。
1.下载文件,我已经将配置调整好为hostNetwork方式访问https://github.com/WillLiaowh...
2.执行命令
kubectl apply -f mandatory.yaml
3.编辑一个test-ingress.yaml文件用来暴露服务

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
    - host: liaowh.com
      http:
        paths:
         - path: /consumer
           backend:
              serviceName: consumer8007
              servicePort: 8007
         - path: /
           backend:
              serviceName: eureka7001
              servicePort: 7001

4.执行命令
kubectl apply -f test-ingress.yaml
5.编辑自己电脑的host文件,将node节点的ip和上面的host做一个映射,目的是为了在浏览器能直接访问。
6.liaowh.com直接访问到eureka主页,liaowh.com/consumer+接口名直接访问到consumer服务下的接口继而访问到provider服务接口
SpringCloud + Docker+ K8s微服务集群部署_第2张图片

你可能感兴趣的:(springcloud,k8s,docker)