20220802实习进度汇报

实习进度汇报

这几天在做什么:

  • hugo 更新实习日记至github主页上
  • git代码管理 上传demo方便导师检查
  • docker 数据卷挂载 部署有状态应用 容器通信 编译镜像推送至华为云镜像仓库
  • 搭建minikube环境 k8s 以pod方式部署 mysql+web应用

这些事情的进度:

1.对demo编写dockerfile镜像编译
2.使用hugo更新实习日记至github主页

github主页 (linjianshu.github.io)

https://github.com/linjianshu/e-bookNew/tree/master

3.docker 数据卷挂载 部署有状态应用 容器通信
  • Dockerfile
FROM golang:alpine AS builder
LABEL stage=gobuilder

ENV GO111MODULE=on \
    CGO_ENABLE=0 \
    GOOS=linux \
    GOARCH=amd64 \
    GOPROXY="https://goproxy.cn,direct"

ENV LANG C.UTF-8

RUN apk update --no-cache && apk add --no-cache tzdata

RUN #apt-get install -y mysql-server


WORKDIR /build

COPY . .

EXPOSE 7777

RUN go build -ldflags="-s -w" -o /app/main

FROM alpine


EXPOSE 3306

RUN apk update --no-cache && apk add --no-cache ca-certificates

COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai

ENV TZ Asia/Shanghai

ENV LANG C.UTF-8

WORKDIR /app

#COPY --from=builder /build/. /app/.
COPY  . /app/.
COPY --from=builder /app/main /app/main

EXPOSE 7777

CMD ["./main"]
  • 挂载mysql 开放3310 默认密码123456 提高权限 后台运行 设定时区
docker run --privileged -d --name mysql84 -v /etc/mysql:/etc/mysql -v /var/lib/data/mysql:/var/lib/mysql -v /var/lib/mysql-files:/var/lib/mysql-files   -p 3310:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 问题解决方案:

https://docs.docker.com/desktop/networking/

我想从容器连接到主机上的服务
主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。我们建议您连接到 host.docker.internal解析为主机使用的内部 IP 地址的特殊 DNS 名称。这是出于开发目的,不适用于 Docker Desktop 之外的生产环境。

您也可以使用gateway.docker.internal.

如果您的机器上安装了 Python,请使用以下说明作为示例,从容器连接到主机上的服务:

运行以下命令在端口 8000 上启动一个简单的 HTTP 服务器。

python -m http.server 8000

如果您已安装 Python 2.x,请运行python -m SimpleHTTPServer 8000.

现在,运行一个容器,安装curl,并尝试使用以下命令连接到主机:

 docker run --rm -it alpine sh
 apk add curl
 curl http://host.docker.internal:8000
 exit
  • 部署到华为云 供外网访问 http://124.220.207.169:7777/blog

来人 把书掏出来

  • 运行截图

image-20220802095017747
image-20220802095017747

image-20220802095335957
image-20220802095335957

4.搭建minikube环境

又租了一台RAM>2GB的华为云服务器 搭建minikube

minikube start --kubernetes-version=v1.23.3 --registry-mirror=https://bmtb46e4.mirror.aliyuncs.com --vm-driver=docker --base-image="anjone/kicbase" --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
  • 运行截图

image-20220802095616280
image-20220802095616280

5.k8s 以pod方式部署 mysql+web应用

image-20220802095657532
image-20220802095657532

  • Pod.yaml文件 web应用
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  labels:
    name: test-pod
spec:
  #定义容器 可以多个
  containers:
    - name: test-pod #容器名字
      image: ccr.ccs.tencentyun.com/hfut-ie/e-book-gin:v3.0 #镜像
      ports:
        - containerPort: 7777
          name: test-pod
          hostPort: 7777
#  dnsPolicy: ClusterFirst
#  hostNetwork: true
  • mysql.yaml文件 mysql3310
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-mysql
  labels:
    app: my-mysql
    version: v1.0.0
spec:
  selector:
    matchLabels:
      app: my-mysql
      version: v1.0.0
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: my-mysql
        version: v1.0.0
    spec:
      containers:
        - image: mysql:latest
          name: my-mysql
          args:
#            - "--ignore-db-dir=lost+found"
            - "--character-set-server=utf8"     #  指定字符编码
            - "--collation-server=utf8_general_ci"    #  指定字符编码
          env:
            - name: MYSQL_ROOT_PASSWORD    #  指定root用户的用户名
              value: "123456"
#            - name: MYSQL_PASSWORD     #  新建用户的用户名
#              value: "123456"
#            - name: MYSQL_USER        # 新建的用户
#              value: "ljs"
            - name: MYSQL_DATABASE    # 新建的数据库
              value: "datashare"
          ports:
            - containerPort: 3310
              name: mysql
          volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
            - name: config
              mountPath: /etc/mysql/mysql.conf.d/mysqld.cnf
              subPath: mysqld.cnf
              readOnly: False
      volumes:
        - name: data
#          persistentVolumeClaim:
#            claimName: mysql-pvc
        - name: config
#          configMap:
#            name: mysql-configmap
  • 数据库连接字符串 尝试了好多次 最后使用ip地址:3306 连接宿主机本地数据库

image-20220802095955401
image-20220802095955401

  • 运行截图

port-forward

image-20220802100528339
image-20220802100528339

curl验证

image-20220802100555894
image-20220802100555894

存在哪些问题:

  • pod理解还有点问题 请问pod内有一组容器 A B 容器A和B本身是一个docker文件系统吗? 那Pod也是一个docker文件系统嘛 是属于docker文件系统里套了两个docker文件系统吗?
  • 使用kubectl port-forward 7777:7777如何后台跑 好像需要一直开着
  • 使用kubectl port-forward 7777:7777 为什么不能通过公网ip:7777/index访问 只能通过本机localhost:7777/index跑
  • 原来打算把pod里放了两个容器 一个是mysql端口3310 一个是web应用端口是7777 所以打算使用的数据库连接字符串是localhost 我认为pod之间应该是能够通信的 但是实际上解析不出来 我不太清楚是为啥 (是因为web应用程序解析localhost的时候 会认为是宿主机的localhost吗? 如果认为是pod的localhost的话 应该是能连的通的才对)

image-20220802092832969
image-20220802092832969

  • 上午实验的时候发现 如果pod里两个容器都是mysql 一个是3310 一个是3311的话 是可以通过 mysql -u root -P 3311 -h localhost -p123456来相互访问的 理论上 是要通过pod的IP来作为host 才能通才对
  • 数据库容器和web应用容器通过一台宿主机连接 生产环境中是这么用的嘛 如果宿主机都不一致的话(web应用在A服务器上 mysql应用在B服务器上)应该怎么使用呢 是修改web应用中的数据库连接字符串吗
  • dockerfile是不是有点问题 目前dockerfile的逻辑是先build之后然后运行 但如果数据库连接不成功的话容器就启动不起来 也无法进入容器修改连接字符串重启容器 不知道应该怎么处理

打算接下来做什么:

  • k8s学习 以service方式部署mysql+web应用
  • 修改service的yaml 尝试数据挂载
  • client-go学习

过程记录(踩坑):

docker run –privileged -d –name mysql84 -v /etc/mysql:/etc/mysql -v /var/lib/data/mysql:/var/lib/mysql -v /var/lib/mysql-files:/var/lib/mysql-files -p 3310:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql

ubuntu重装mysql

1、删除 mysql

sudo apt-get autoremove –purge mysql-server-5.0

sudo apt-get remove mysql-server

sudo apt-get autoremove mysql-server

sudo apt-get remove mysql-common (非常重要)

上面的其实有一些是多余的,建议还是按照顺序执行一遍

清理残留数据

dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P

2、安装 mysql

sudo apt-get install mysql-server

记得启动服务 设置密码

docker连接宿主机

https://docs.docker.com/desktop/networking/ 我想从容器连接到主机上的服务 主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。我们建议您连接到 host.docker.internal解析为主机使用的内部 IP 地址的特殊 DNS 名称。这是出于开发目的,不适用于 Docker Desktop 之外的生产环境。

您也可以使用gateway.docker.internal.

如果您的机器上安装了 Python,请使用以下说明作为示例,从容器连接到主机上的服务:

运行以下命令在端口 8000 上启动一个简单的 HTTP 服务器。

python -m http.server 8000

如果您已安装 Python 2.x,请运行python -m SimpleHTTPServer 8000.

现在,运行一个容器,安装curl,并尝试使用以下命令连接到主机:

docker run –rm -it alpine sh apk add curl curl http://host.docker.internal:8000 exit

minikube版本和镜像问题

minikube start –kubernetes-version=v1.23.3 –base-image=“kicbase/stable:v0.0.32”

minikube start –kubernetes-version=v1.23.3 –registry-mirror=https://bmtb46e4.mirror.aliyuncs.com –vm-driver=docker –base-image=“anjone/kicbase” –image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

kubectl常用指令

kubectl get node

kubectl run testapp –image=ccr.ccs.tencentyun.com/hfut/e-book-gin:v1.0

kubectl apply -f ./mysql.yaml

kubectl get pod

kubectl get deployment

kubectl get pod -o wide

kubectl describe pod [testapp]

kubectl logs testapp –previous

kubectl delete pod my-mysql-6b8cf957fc-2sl59

kubectl delete deploy/my-mysql

ssh突然连接不上问题

不要对etc/ssh目录盲目扩大权限 chmod 600 /etc/ssh/*key 使用ssh -t 查看问题 lsof -i:22 确定是否开着

centos8 重装mysql问题

1、卸载 之前是用yum安装的,现在通过yum去卸载yum remove -y mysql find / -name mysql 找到残留的文件,再通过rm -rf去删除对应的文件

注意将所有有关的文件全部删除,不然会有问题!

2、安装 yum update yum install mysql-server

ps -ef | grep mysql

systemctl start mysqld

systemctl enable mysqld

systemctl status mysqld

3、修改root用户密码 修改root用户的密码。

alter user ‘root’@’localhost’ identified by ‘password’

刷新权限

flush privileges

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy