Kubernetes部署Golang工程

2,707 阅读2分钟

一、Kubernetes简述

1.什么是Kubernetes

  • Kubernetes 是一个开源项目,用于统一管理容器化的应用集群。
  • Kubernetes 负责在大规模服务器环境中管理容器组(pod)的扩展、复制、健康,并解决 pod 的启动、负载均衡等问题。
  • 上一节中我们使用Docker进行golang镜像的创建和运行,在实际项目中新的镜像越来越多,便需要kubernetes进行统一编排和管理,实现负载均衡和资源调度。

2.搭建Kubernetes

二、简单操作kubernetes

注:这里kubernetes只做简单的尝试,我会在实战项目中具体使用

1.使用上一节Docker的使用&制作Golang微服务镜像并运行中的镜像

1.1. docker login, 登录自己的Docker公共镜像库dockerhub,登录账号(没有便自行创建)

docker login.png

1.2. 上传自己镜像

  • docker tag, 首先给自己的镜像打上tag

docker tag.png

  • docker push, 上传镜像到公共镜像库

docker push.png

[root@k8s-master ~]# kubectl get nodes -o wide
NAME         STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
k8s-master   Ready    master   39d   v1.15.0   172.20.3.13   <none>        CentOS Linux 7 (Core)   3.10.0-1160.36.2.el7.x86_64   docker://18.6.1
k8s-node01   Ready    <none>   39d   v1.15.0   172.20.3.14   <none>        CentOS Linux 7 (Core)   3.10.0-1160.36.2.el7.x86_64   docker://18.6.1
k8s-node02   Ready    <none>   39d   v1.15.0   172.20.3.15   <none>        CentOS Linux 7 (Core)   3.10.0-1160.36.2.el7.x86_64   docker://18.6.1

dockerhub.png

2.kubernetes使用镜像运行

  • 我的k8s
  • practice-pod.yaml文件的编写,这个是创建pod

practice-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: practice
  labels:
    app: practice
spec:
  containers:
    - name: practice
      image:  caoxunaaa/practice:latest
      imagePullPolicy: Always
      ports:
      - containerPort: 8080
  • practice-svc.yaml文件的编写,这个是创建上面pod对应的网络,通过selector进行匹配,NodePort类型使外部能访问。

practice-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: practice-svc
  labels:
    app: practice
spec:
  type: NodePort
  ports:
  - port: 8080
    name: practice
    targetPort: 8080
    nodePort: 30008
    protocol: TCP
  selector:
    app: practice  
  • 运行
[root@k8s-master practice]# kubectl apply -f practice-pod.yaml
pod/practice created
[root@k8s-master practice]# kubectl apply -f practice-svc.yaml
service/practice-svc created
[root@k8s-master practice]# kubectl get pods -o wide
NAME       READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
practice   2/2     Running   0          2m53s   10.244.2.164   k8s-node01   <none>           <none>
[root@k8s-master practice]# kubectl get svc -o wide
NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE     SELECTOR
kubernetes     ClusterIP   10.1.0.1       <none>        443/TCP          39d     <none>
practice-svc   NodePort    10.1.158.137   <none>        8080:30008/TCP   2m30s   app=practice
  • 得到结果

k8s practice.png