jxlwqq / blog-microservices

A blog microservices written in Golang, which can be deployed in an Istio-enabled kubernetes cluster.
MIT License
189 stars 40 forks source link

linux (debian10) 下部署踩坑 (学习) #3

Open ifnk opened 2 years ago

ifnk commented 2 years ago

安装 k8s

我本来的系统是 archlinux ,但是 手动装 k8s 装不上…… 后来看到 一个脚本

https://github.com/lework/kainstall 这个 支持 centos ubuntu 和 debian 安装 ,我就 在 本机装了 个 virtualbox ,下载了 debian 的 vdi 虚拟机 文件 装好了 debian 的虚拟机

然后按照 文档说的 下载 好 离线包 和 sh 开始安装

$ bash kainstall-debian.sh init \
                           --master 10.168.1.250  \  # 这个master 就 是 k8s 的大脑 (也是我的这台虚拟机)
                           --worker 10.168.1.251,10.168.1.253 \ # 这行可以 去掉 ,因为我电脑内存跑这三个虚拟机 后就没有多少了 ……
                           --user root \ # 操作系统的 用户名(我虚拟机都设置了 root)
                           --password root \ # 操作系统的 密码 (我虚拟机都设置了 root)
                           --port 22 \
                           --offline-file 1.23.1_debian10.tgz  # 这个是 k8s 离线包 因为k8s 下载的话 不翻墙 下不动 ,人家贴心的准备了离线包 

装完后 没有 error 都是info 就是 k8s 安装成功了 看下 node

$ kubectl get nodes
NAME               STATUS   ROLES                  AGE   VERSION
k8s-master-node1   Ready    control-plane,master   8h    v1.23.1

为了操作方便 shell 使用 了 zsh , 可以 搭配 k8s 官方的 zsh 框架 进行 补全 https://kubernetes.io/zh/docs/tasks/tools/included/optional-kubectl-configs-zsh/

(zsh 配置 可以 百度,有很多文章教怎么配)

配置效果如下 image

安装 docker buildx

作者 的 dockerfile 里面 带有 $TARGETPLATFORM TARGETARCH TARGETOS 等参数 ,在debian 里面 跑 make docker-build 会报错 image

询问作者得知要安装 docker buildx https://docs.docker.com/buildx/working-with-buildx/#manual-download 需要在 https://github.com/docker/buildx/releases/tag/v0.7.1 这里面 下载 对应版本 的 可执行文件 然后 把 他 移动到 $HOME/.docker/cli-plugins 这个目录里面 记得改名叫 docker-buildx 并给 可执行权限 然后 运行 docker buildx install 安装 docker-buildx

$ docker build --help

Usage:  docker buildx build [OPTIONS] PATH | URL | -

Start a build

可以看到 docker buildx build 就是成功 了 

另外 make docker-build 的时候 下载 go 依赖包很慢 需要 给go 加上 国内 源 , image

当运行 go download 的时候 我这里也会报错 image 可以 把 go download 这一行整行删除 ,因为go build 的时候 也会 下载依赖包的 我这里把 go download 这一行删除 能跑过,不删除 就 报错 ……

安装 istio

先在istio 下载界面 下载 压缩包 https://github.com/istio/istio/releases/tag/1.13.0 解压 后 cd 进去


$ cd istio-1.13.0/bin  找到bin 目录 

$ ll
.rwxr-xr-x 95M root 14 Feb 16:28 istioctl

$ cp istioctl /usr/bin/istioctl  把可执行文件 复制到 /usr/bin/istioctl 就可以 全局 使用 了

$ whereis istioctl
istioctl: /usr/bin/istioctl

然后执行 istioctl install --set profile=default -y 安装

创建持久化存储的一些文件

作者 的 mysql.yaml 我这里 没有办法 跑 ,user-db post-db 等 pod 起不来 kubectl describe pod user-db-6b8765cdd5-qzzqh 查看 event

 Warning  FailedScheduling  110s                default-scheduler  0/1 nodes are available: 1 persistentvolumeclaim "user-db" not found.
  Warning  FailedScheduling  30s (x3 over 109s)  default-scheduler  0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.

说却 pvc ,问了作者才知道 他 苹果 的 pv sc 都是配好的…… linux 下 没有默认的 要自己配置 才行

先创建 sc sc.yaml

# sc  抽象层的磁盘 类型
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage # sc 名字
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

因为项目有 4 个 mysql.yaml 所以创建 4 个 对应的pv

以 user-pv.yaml 为例 ,别的都是 metadata.name 换个对应的 名字就行了

apiVersion: v1
kind: PersistentVolume
metadata:
  name: user-pv # 这里 对应 comment pvc 的话就 叫 comment-pv 
  labels:
    type: local
spec:
  storageClassName: local-storage # sc 名称
  capacity:
    storage: 10Gi
  accessModes: # 卷可以被一个节点以读写方式挂载
    - ReadWriteOnce
  local: # 节点上面  挂在 pv 的 路径
    path: "/mnt/data"

  nodeAffinity: # 指定 哪一个节点来 放pv 挂载的 路径
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-master-node1 # 这个node 可以根据 kubectl get node 获取 节点名字

接着修改 作者 的 mysql.yaml 加上 两行 分别绑定 sc 和对应 的 pv

image

然后 在 执行 make kube-deploy 命令 部署 执行 k get pods -o wide 查看容器 可以 看到 至少有一 个 db 是 跑起来 了…… 别的全失败 了,去看看原因 …… image

边学习边写 , 没有写完 ,后面 在写 ……