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

4次阅读

共计 3582 个字符,预计需要花费 9 分钟才能阅读完成。

装置 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 <<EOF > /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
最终成果是这样:

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

一切顺利的话三个服务应该都部署胜利

但当初问题是怎么拜访,这就须要用到 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 服务接口

正文完
 0