美文网首页
记录一次真实迁移经历

记录一次真实迁移经历

作者: H_appiness | 来源:发表于2020-03-08 19:25 被阅读0次

    迁移GitHub Pages到k8s

    背景:我的个人导航网站https://www.k8s.fit/原来是在GitHub Pages上的,由于在国内访问GitHub Pages速度真的感人,从而产生了一个想法:把GitHub Pages迁移到k8s内,这样不仅解决了访问速度慢的问题,也间接的锻炼一下自己对k8s的实际操作能力!
    废话不多说,直接上操作的过程!

    整体思路:

    • 基于nginx镜像把代码打包进去即可
    • docker环境下跑通然后上kubernetes
    • 使用cert-manager自动签发证书

    步骤一

    把github上源码克隆到本地并重命名

    git clone https://github.com/xxx/xxx.git
    mv xxx.git html
    

    步骤二 - 编写dockerfile

    vim Dockerfile

    FROM nginx:1.9.1
    MAINTAINER Happiness-lijian      
    COPY ./html /usr/share/nginx/html
    
    # 解析:基于nginx:1.9.1镜像(基础镜像一定要固定版本!!!)   拷贝当前目录下的html目录到nginx镜像的默认目录/usr/share/nginx/html
    # 接下来构建镜像,确保当前上下文目录下只有html目录和Dockerfile,避免把无用的东西构建到镜像中去,形成臃肿的镜像
    
    docker build -t xxx/nginx:v1 .
    

    步骤三 - 测试镜像

    步骤二完成后,执行如下命令来测试镜像是否可用

    docker run -dit --name nginx -p 3800:80 xxx/nginx:v1
    
    # 解析:运行xxx/nginx:v1名为nginx的镜像,暴露出3800端口到物理机
    # 验证:局域网内机器访问 物理机IP:3800查看是否成功
    
    ## 运行成功的镜像push到你的仓库中
    

    步骤四 - 使用kubernetes运行该镜像

    vim daohang.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: daohang
      name: daohang
      namespace: daohang
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: daohang
      template:
        metadata:
          labels:
            app: daohang
        spec:
          containers:
          - image: xxx/nginx:v1
            name: daohang
            resources:
              limits:
                cpu: 2000m
                memory: 1Gi
              requests:
                cpu: 1000m
                memory: 1000Mi
          nodeName: k8s-node2
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: daohang-svc
      namespace: daohang
      labels:
        app: daohang
    spec:
      type: NodePort
      ports:
        - port: 80
          protocol: TCP
          targetPort: 80
          name: http                                                                      
          nodePort: 30800
      selector:
        app: daohang
    
    # 解析:如上:我这里使用Deployment控制器来运行该镜像,并指定了其运行的节点
    # 部署该文件
    
    kubectl apply -f daohang.yaml
    

    步骤五 - 测试是否生效

    # 查看其是否正常运行
    
    kubectl get pod,svc -n daohang
    
    NAME                           READY   STATUS    RESTARTS   AGE
    pod/daohang-68fd898975-svj2r   1/1     Running   0          102m
    
    NAME                  TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    service/daohang-svc   NodePort   10.244.78.194   <none>        80:30800/TCP   102m
    
    # 验证:局域网内机器访问 nodeIP:30800查看是否成功
    

    步骤六 - 使用cert-manager自动签发证书

    vim ingress-daohang.yaml

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: daohang-ingress
      namespace: daohang
      annotations:
        kubernietes.io/ingress.class: "nginx"
    spec:
      tls:
      - hosts:
        - www.k8s.fit
        secretName: daohang-tls
      rules:
      - host: www.k8s.fit
        http:
          paths:
          - path: /
            backend:
              serviceName: daohang-svc
              servicePort: 80
    ---
    apiVersion: cert-manager.io/v1alpha2
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-prod
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        email: 15110264730@163.com
        privateKeySecretRef:
          name: letsencrypt-prod
        solvers:
        - http01:
            ingress:
              class: nginx
    ---
    apiVersion: cert-manager.io/v1alpha2
    kind: Certificate
    metadata:
      name: daohang
      namespace: daohang
    spec:
      secretName: daohang-tls
      issuerRef:
        name: letsencrypt-prod
        kind: ClusterIssuer
      duration: 2160h
      renewBefore: 360h
      keyEncoding: pkcs1
      dnsNames:
      - www.k8s.fit                                           
    
    # 部署该文件
    
    kubectl apply -f ingress-daohang.yaml
    

    关于cert-manager查看上篇文章 Kubernetes安装cert-manager(二)

    关于cert-manager查看上篇文章 Kubernetes安装cert-manager(一)

    总结:

    基本上所有的操作步骤和注意事项都已经写在上面了,整体来说,迁移过程不是特别费事,稍微重要的一点就是在编写Dockerfile的时候,不需要编译的就这样。需要编译的要稍微复杂点。另外就是每做一步就要测试验证一步,以免最后出现问题导致思路混乱找不到下手点来排除故障。

    最后:保留好步骤二里的Dockerfilehtml目录,假如后期对代码进行更改(增加/删除/更改)只需编辑源代码文件后重新build打一个新的TAGpush到你的仓库中去。kubernetes这边直接使用如下命令进行替换镜像即可:

    # 假设新TAG是v2
    
    kubectl set image deploy nginx nginx=nginx:v2
    
    # 解析:更改名为nginx的deployment控制器内名为nginx的container的镜像为nginx:v2
    

    相关文章

      网友评论

          本文标题:记录一次真实迁移经历

          本文链接:https://www.haomeiwen.com/subject/qzejdhtx.html