實 docker 平移到 k8s

目前都是 docker 容器,一臺機器大概 50 個容器,如果服務器掛了,那麼這臺機子上的容器也就不提供服務了 

剛開始玩 k8s 的同學可能有很多疑問,k8s 和 docker 的關係?也不知道怎麼遷移到 k8s 上 讓 k8s 管理 docker,雖然 docker 現在要涼涼了,但是不得不承認這個工具確實好用

環境準備:

k8s 集羣(有問題的話 最新的腳本可以找我拿)

快速搭建

王思宇,公衆號:Linux 土著運維攻城獅使用 kubeadm 快速部署 kubernetes 集羣

內網用 DNS 一個(可選)

內網 DNS

王思宇,公衆號:Linux 運維開發之路內網 DNS 服務器 搞一個!(親測可用)

阿里雲鏡像倉庫(可選)

docker 容器若干

如果沒有鏡像庫就本地遷移鏡像包

1. 查看容器運行命令

需要的工具是 runlike

安裝方式

yum install python3 -y
pip3 install runlike
docker ps -a
runlike -p 508b36cfbde3
docker run \
  --name=Yapi_1.99 \
  --hostname=508b36cfbde3 \
  --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
  --volume=/etc/localtime:/etc/localtime \
  --volume=/home/yapi:/soft    # 只需要看這個 掛載目錄 我們要備份這個
  --network=php_net            # 當前用的網絡類型是 macvlan 這個不用管
  --privileged \
  --expose=22/tcp \
  --restart=always \
  --label='org.opencontainers.image.created=2020-08-09 00:00:00+01:00' \
  --label='org.label-schema.vendor=CentOS' \
  --label='org.label-schema.schema-version=1.0' \
  --label='org.label-schema.license=GPLv2' \
  --label='org.label-schema.build-date=20200809' \
  --label='org.opencontainers.image.licenses=GPL-2.0-only' \
  --label='org.opencontainers.image.vendor=CentOS' \
  --label='org.label-schema.name=CentOS Base Image' \
  --label='org.opencontainers.image.title=CentOS Base Image' \
  --detach=true \
  192.168.1.13:180/test/jdk:1.8.0_261 \
  /usr/sbin/sshd -D

很明顯 這是前任運維做好了的鏡像

用 centos7 原始鏡像裝了 openssh-server java 等服務
然後開機啓動命令爲

/usr/sbin/sshd -D

需要打包這個數據目錄 /home/yapi

2. 遷移鏡像遷移數據

# 鏡像
docker save 192.168.1.13:180/test/jdk:1.8.0_261  >jdkimage.tar
scp jdkimage.tar 192.168.1.11:/data  # data爲k8s共享目錄 底層用的glusterFS
# 數據 其實就是yapi服務 遷移數據類似 如果量大建議走數據庫備份
tar zcf yapi.tar.gz /home/yapi/
scp yapi.tar.gz 192.168.1.11:/data
ssh 192.168.1.11
docker load </data/jdkimage.tar
docker tag 192.168.1.13:180/test/jdk:1.8.0_261 jdk:1.8 
docker images
cd /data && tar xf yapi.tar.gz # 此時 數據目錄爲/data/yapi
# 具體的操作就是把一個服務器docker鏡像挪到另外一臺服務器上

打包鏡像用了挺長時間,裏邊東西挺多啊。

3. 寫 yaml

數據和鏡像都有了,開始編排

apiVersion: apps/v1
kind: Deployment
metadata:
  name: yapi
spec:
  selector:
    matchLabels:
      app: yapi
  replicas: 1                     # web服務一般都可以指定多個                      
  template:
    metadata:
      labels:
        app: yapi
    spec:
      nodeSelector:               # 指定pod創建在哪個節點
        type: db                  
      containers:
      - name: yapi
        image: jdk:1.8            # 剛纔打tag的鏡像
        volumeMounts:
        - name: data
          mountPath: /soft        # 對應容器內部目錄
        - name: localtime
          mountPath: /etc/localtime
        ports:
        - containerPort: 3000     # yapi服務對外服務端口
        env:
        - name: TZ
          value: Asia/Shanghai
      volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime
      - name: data
        hostPath:
          path: /data/yapi
---
apiVersion: v1
kind: Service
metadata:
  name: yapi
spec:
  ports:
  - name: yapi
    protocol: TCP
    port: 3000
    targetPort: 3000
  selector:
    app: yapi
  sessionAffinity: None
  type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: yapi
spec:
  rules:
  - host: "yapi.pinuc.tech"    # 外部訪問域名,然後用dns解析到任意集羣IP
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: yapi
            port:
              number: 3000
kubectl apply -f yapi.yaml
kubectl get all | grep yapi
  pod/yapi-55d6457956-crp9v      1/1     Running   0             62m
  service/yapi         NodePort    10.101.193.160   <none>        3000:32497/TCP                               60m
  deployment.apps/yapi      1/1     1            1           62m
  replicaset.apps/yapi-55d6457956      1         1         1       62m
kubectl get ing | grep yapi
  yapi     nginx    yapi.pinuc.tech    192.168.1.10,192.168.1.11,192.168.1.14,192.168.1.15   80      62m

由於服務沒有啓動

需要進入容器啓動服務,也可以繼續定製該容器,讓它運行時就啓動

啓動 yapi 的命令爲

kubectl exec -it yapi-55d6457956-crp9v -- /bin/bash        # 進入pod 由於該pod裏邊還有一個容器就直接進入這個容器了
[root@yapi-55d6457956-crp9v /]# nohup /soft/node-v14/bin/node /soft/yapi/vendors/server/app.js & # 啓動
監聽3000端口

然後訪問 http://yapi.pinuc.tech/

其實就是用一樣的鏡像 用域名訪問即可(因爲 ip 會變)

如果是數據庫可以選擇 dump 或者打包 data

唯一注意的一點是 遷移之前一定要進容器裏看裏邊在跑什麼~ 測試成功之後在 docker rm 

over~

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ixth113GE8w-3OuYXI3Wow