k8s学习

容器(docker)

docker engine配置阿里云镜像加速

  • {
      "builder": {
        "gc": {
          "defaultKeepStorage": "20GB",
          "enabled": true
        }
      },
      "experimental": false,
      "features": {
        "buildkit": true
      },
      "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "http://hub-mirror.c.163.com",
        "https://registry.docker-cn.com"
      ]
    }
    

docker-desktop转移镜像文件存储路径

  • # 备份已有image数据
    wsl --export docker-desktop-data D:\File\ProjectFile\Resource\docker\backup\docker-desktop-data.tar
    wsl --export docker-desktop D:\File\ProjectFile\Resource\docker\backup\docker-desktop.tar
    # 注销当前的发行版
    wsl --unregister docker-desktop-data
    wsl --unregister docker-desktop
    # 重新导入备份的'docker-desktop-data'与'docker-desktop'
    wsl --import docker-desktop-data "D:\File\ProjectFile\Resource\docker\data" "D:\File\ProjectFile\Resource\docker\backup\docker-desktop-data.tar" --version 2
    wsl --import docker-desktop "D:\File\ProjectFile\Resource\docker\docker-desktop" "D:\File\ProjectFile\Resource\docker\backup\docker-desktop.tar" --version 2
    

docker build 的工作原理

  • # docker build 构建镜像的流程
    执行 docker build -t <imageName:imageTag> .
    Docker 客户端会将构建命令后面指定的路径(.)下的所有文件打包成一个 tar 包,发送给 Docker 服务端
    Docker 服务端收到客户端发送的 tar 包,然后解压,根据 Dockerfile 里面的指令进行镜像的分层构建
    # 正确理解 Docker 镜像构建上下文
    了解了 Docker 的架构和镜像构建的工作原理后,Docker 构建上下文也就容易理解了。Docker 构建上下文就是 Docker 客户端上传给服务端的 tar 文件解压后的内容,也即 docker build 命令行后面指定路径下的文件
    Docker 镜像的构建是在远程服务端进行的,所以客户端需要把构建所需要的文件传输给服务端。服务端以客户端发送的文件为上下文,也就是说 Dockerfile 中指令的工作目录就是服务端解压客户端传输的 tar 包的路径
    # 关于 docker build 指令的几点重要的说明
    如果构建镜像时没有明确指定 Dockerfile,那么 Docker 客户端默认在构建镜像时指定的上下文路径下找名字为 Dockerfile 的构建文件
    Dockerfile 可以不在构建上下文路径下,此时需要构建时通过 -f 参数明确指定使用哪个构建文件,并且名称可以自己任意命名
    

Docker数据卷

  • 卷技术,实际就是将容器内的目录,挂在到主机上

  • 总结一句话:容器的持久化和同步操作!容器间也是可以数据共享

使用数据卷
  • 方式一:命令行 -v
    docker run -it -v 主机目录:容器目录
    
具名和匿名挂载
  • 匿名挂载:-v 容器内路径 不指定容器外路径

  • 具名挂载

  • 区分匿名挂载和具名挂载

  • -v 容器内路径         # 匿名挂载
    -v 卷名:容器内路径     # 具名挂载
    -v /主机路径:容器内路径 # 指定路径挂载
    
数据卷容器
  • 多个mysql实现数据共享

  • # mysql docker01
    docker run -d -p 33061:3306 -v D:\docker\mnt\mysql\conf:/etc/conf.d -v D:\docker\mnt\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
    
    # mysql docker02
    # 通过--volumes-form mysql01实现数据同步
    docker run -d -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-form mysql01 mysql:5.7
    
  • 容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用

  • 但是一旦你持久化到了本地,这时候,本地的数据是不会删除的

初识DockerFile

  • DockerFile就是用来构建docker镜像的构建文件!命令脚本!
  • 通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层
基础知识
  • 每个保留关键字(指令)都是必须大写字母
  • 执行从上到下顺序执行
  • 表示注释
  • 每一个指令都会创建提交一个新的镜像层,并提交
构建步骤
  • 编写一个dockerfile文件
  • docker build 构建成为一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(DockerHub 阿里云镜像)
DockerFile的指令
  • FROM       # 基础镜像,一切从这里开始构建
    MAINTAINER # 镜像是谁写的,姓名+邮箱
    RUN        # 镜像构建的时候需要运行的命令
    ADD        # 步骤,tomcat镜像,这是tomacat压缩包!添加内容
    WORKDIR    # 镜像的工作目录 
    VOLUME     # 挂载的目录
    EXPOSE     # 保留端口配置
    CMD        # 指定这个容器启动的时候要运行的命令
    ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
    ONBUILD    # 当构建一个被继承 Dockerfile,这个时候就会运行onbuild
    COPY       # 类似add,将我们文件拷贝到镜像中
    ENV        # 构建的时候设置环境变量
    
创建自己的镜像
  • # 创建一个自己的镜像
    新建文件mydockerfile-centos
    
    # build镜像
    docker build -f mydockerfile-centos -t mycentos:0.1 .
    
    # docker history imagesID
    我们平时查看镜像是如何做的,通过上面的命令
    
发布自己的镜像
  • # DockerHub
    # 官网注册自己的账号
    # 确定这个账号可以登录
    docker login -u 用户名
    # 输入密码进入
    # 在我们服务器上提交自己的镜像
    docker push taohy/
    # 登录完就可以提交镜像
    
在阿里云发布镜像
  • 登录阿里云
  • 找到容器镜像服务
  • 创建命名空间
  • 创建容器镜像
  • 浏览镜像仓库信息

Docker网络

网络详解
  • # 进入容器
    PS C:\Users\taohy> docker exec -it  98da3ab14625 /bin/bash
    
    # 查看容器的内部网络IP地址 172.17.0.3
    root@98da3ab14625:/usr/local/bin/ignition	# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
            ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
            RX packets 16  bytes 1072 (1.0 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 9  bytes 602 (602.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 1394  bytes 354097 (354.0 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 1394  bytes 354097 (354.0 KB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
            
    # 再启动一个容器,查看ip地址 172.17.0.2 
    root@801e60036d61:/usr/local/bin/ignition	# ifconfig
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
            ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
            RX packets 472  bytes 373438 (373.4 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 430  bytes 33381 (33.3 KB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 708  bytes 173243 (173.2 KB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 708  bytes 173243 (173.2 KB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    # 思考,外机能否ping通主机容器内部?
    Linux能ping通
    winodws不能ping通
    
    # 容器如何访问到Windows?
    容器访问外机,默认的要用host.docker.internal
    
    # 容器之间能互相通吗? 可以通 容器内:172.17.0.2 ping 172.17.0.3
    root@801e60036d61:/usr/local/bin/ignition	# ping 172.17.0.3
    PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
    64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.051 ms
    64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.037 ms
    64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.052 ms
    
    # 查看网络命令 docker network --help 
    PS C:\Users\taohy> docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    075fff009f22   bridge    bridge    local
    efbaf94573b8   host      host      local
    29125732f2e0   none      null      local
    
    # 查看网络具体信息
    docker network inspect 075fff009f22
    
    # inspect 是查看具体信息,非常有用,不管是查看容器内部还是容器网络
    docker inspect 容器ID
    docker network inspect 网络ID
    
查看所有的docker网络
  • PS C:\Users\taohy> docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    075fff009f22   bridge    bridge    local
    efbaf94573b8   host      host      local
    29125732f2e0   none      null      local
    
网络模式
  • bridge :桥接 docker(默认,如果自己创建也用bridge)
  • none:不配置网络(用的少)
  • host:和主机共享网络
  • container:容器网络连接(用的少)
网络测试
  • # 创建自定义的网络bridge
    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
    
    # 创建之后查看网络,mynet
    PS C:\Users\taohy> docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    075fff009f22   bridge    bridge    local
    efbaf94573b8   host      host      local
    6c3a287738b3   mynet     bridge    local
    29125732f2e0   none      null      local
    
    # 启动容器放在自定义网络 --net 
    docker  run -d -P --name tomcat-net-01 --net mynet tomcat
    
    # 假设要跨网络操作别人,就需要使用docker network connect 连通!
    

容器编排(学习环境)

安装Chocolatey

  • # 输入此命令
    Get-ExecutionPolicy
    
    # 如果返回 Restricted ,运行下列命令
    Set-ExecutionPolicy AllSigned
    
    # 最后安装Chocolatey,执行此命令
    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    
    # 检测是否安装成功
    choco -
    
    # 安装软件
    choco install kubernetes-cli
    
    # 查看本地安装软件列表
    choco list -li
    
    # 卸载软装
    choco uninstall kubernetes-cli
    

安装kubectl

  • choco install kubernetes-cli
    

安装minikube

  • choco install minikube
    
启动本地 Kubernetes 集群
  • # 启动集群
    minikube start --vm-driver=hyperv --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
    # 检查集群的状态
    minikube status
    # 访问 minikube中的 k8s dashboard
    minikube dashboard
    # 检测kubectl
    kubectl get nodes
    # 停止集群
    minikube stop
    # 清理 minikube 的本地状态
    minikube delete
    # 删除本地所有集群和配置
    minikube delete --all
    

安装kind

  • choco install kind
    
创建集群
  • # 创建集群,不指定集群名称默认为kind
    kind create cluster --config D:\File\ProjectFile\Resource\kind\kind.yaml --name kind-cluster
    # 查看集群
    kind get clusters
    # 删除某个集群
    kind delete cluster --name kind-cluster
    # 删除所有集群
    kind delete clusters –all
    # 查看所有可用的上下文( *:表示目前设置的上下文)
    kubectl config get-contexts
    CURRENT   NAME                               CLUSTER                      
              kind-kind                          kind-kind            
    *         kind-kind-1.15.6                   kind-kind-1.15.6
    # 获取当前K8S上下文
    kubectl config current-context
    # 设置上下文
    kubectl config set-context kind-kind 
    Context "kind-kind" modified.
    # 检查设置的上下文
    kubectl get nodes
    NAME                        STATUS   ROLES    AGE     VERSION
    kind-1.18.2-control-plane   Ready    master   8m20s   v1.18.2
    
  • kind.yaml

  • kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    networking:
      # WARNING: It is _strongly_ recommended that you keep this the default
      # (127.0.0.1) for security reasons. However it is possible to change this.
      apiServerAddress: "0.0.0.0"
      # By default the API server listens on a random open port.
      # You may choose a specific port but probably don't need to in most cases.
      # Using a random port makes it easier to spin up multiple clusters.
      apiServerPort: 6443
    nodes:
      - role: control-plane
        extraPortMappings:
        - containerPort: 30001
          hostPort: 30001
          listenAddress: "0.0.0.0"
          protocol: tcp
        - containerPort: 30002
          hostPort: 30002
          listenAddress: "0.0.0.0"
          protocol: tcp
        - containerPort: 30003
          hostPort: 30003
          listenAddress: "0.0.0.0"
          protocol: tcp
        - containerPort: 30004
          hostPort: 30004
          listenAddress: "0.0.0.0"
          protocol: tcp
        - containerPort: 30005
          hostPort: 30005
          listenAddress: "0.0.0.0"
          protocol: tcp
    
安装Kubernetes Dashboard
  • # 安装
    kubectl apply -f D:\File\ProjectFile\Resource\kind\recommended.yaml
    # 查看deployment状态
    kubectl get deployments -n kubernetes-dashboard
    
  • 修改recommended.yaml

  • 在这里插入图片描述

  • 在这里插入图片描述

创建账号与授权
  • # 创建账号与授权
    kubectl apply -f D:\File\ProjectFile\Resource\kind\dashboard-adminuser.yaml
    # 查看token
    kubectl -n kubernetes-dashboard create token admin-user
    # token
    eyJhbGciOiJSUzI1NiIsImtpZCI6Ilh3ZVU5TmVEX3dpVkZld0ExeVE5Z2hjVDF2aUt0VkhuTVBTT0dwWTM1aE0ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjU4MzAzMzIxLCJpYXQiOjE2NTgyOTk3MjEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiZGQwZjU2NDMtODc3OC00NGRiLWIxNGQtNDVjYjRjNzUzZDIwIn19LCJuYmYiOjE2NTgyOTk3MjEsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.Z85EQOuwrQwo1fz80rh4SIsaR8CgutFhXs7nxBwFV42RjWk5-XfPEfdHNNsexWC3z_nOZ9Me6yFu97vSevBRrjcV_QjofYdgZHCGQeiWQ-sKEGy8v8Cy1Juu6Mo2aJXrOWz--bGqSssXWOiLWATeWxEYuzr_LRO0fmCT1PZ-1Rk7SZok324pV2qdX1AkG4p5k6NhiMhQSHjHb4C37VKNatMbialIL6JO_YlgTSNWUHY33F8XqczqbtYSPSF51qyp3JPSWlztm5sFkhblmdg3_BYznEZjz4yieBiT5sxVgLI8MFT83rGS_UFy9R-UvEMD1gE4IrZu5fctsQ43H6GVOg
    # 删除账号和绑定关系
    kubectl -n kubernetes-dashboard delete serviceaccount admin-user
    kubectl -n kubernetes-dashboard delete clusterrolebinding admin-user
    
  • dashboard-adminuser.yaml

  • apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    
访问dashboard图形化界面
  • # 通过当前主机ip:nodePort访问
    https://localhost:30001
    
  • 在这里插入图片描述

  • 在这里插入图片描述

安装Helm

  • choco install kubernetes-helm
    

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fearIess233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值