0
点赞
收藏
分享

微信扫一扫

Docker、Portainer、K8S环境搭建

晴儿成长记 2022-01-22 阅读 110

Docker、Portainer、K8S环境搭建

安装Docker

安装步骤

  1. 安装依赖包

    yum install -y yum-utils device-mapper-persistent-data lvm2

  2. 配置阿里云yum源,以便加速下载docker包

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  3. 重建缓存

    yum makecache fast

  4. 安装docker客户端

    yum -y install docker-ce

  5. 设置ustc的镜像源;可加速docker镜像下载;ustc docker mirror的优势之一就是不需要注册,是真正的公共服务:https://mirrors.ustc.edu.cn/help/dockerhub.html

    • 编辑该文件(如果不存在,就创建一个):

      vim /etc/docker/daemon.json

    • 在文件中输入如下内容并保存(第二个为阿里云的源):

      {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn", "https://registry.cn-hangzhou.aliyuncs.com"]}

    • 重启docker服务:systemctl restart docker

    • 查看源配置:docker info|grep Mirrors -A 2

  6. 启动docker

    systemctl start docker

  7. 运行docker hello-world,验证docker安装

    docker run hello-world

    image-20220119104911077

Docker常用操作命令

Docker容器信息

  • 查看容器版本

    docker version

  • 查看容器版本号

    docker -v

  • 查看容器信息

    docker info

  • 查看容器帮助

    docker --help

镜像操作(对于镜像的操作可使用镜像名、镜像ID)

  • 查看镜像

    docker images

  • 搜索镜像

    docker search 镜像名称

    例如查找nginx镜像:docker search nginx

  • 拉取镜像

    docker pull 镜像名称

    例如拉取镜像halo:docker pull ruibaby/halo:latest

  • 上传镜像

    docker push 镜像名称

  • 删除镜像

    docker rmi 镜像名称或者镜像ID

    例如删除镜像halo:docker rmi ruibaby/halo 或者 docker rmi caebc1d425f9

  • 强制删除镜像(针对基于有已运行容器进程的镜像)

    docker rmi -f 镜像名称或者镜像ID

  • 多个镜像删除,不同镜像间以空格间隔

    docker rmi -f 镜像名称1 镜像名称2 ……

    或者

    docker rmi -f 镜像ID1 镜像ID2 ……

  • 删除本地全部镜像

    docker rmi -f $(docker images -q)

  • 镜像构建

    1. 编写dockerfile

      vim /usr/mydockerfile

    2. 构建docker镜像

      docker build -f /usr/mydockerfile -t mydocker:1.1

容器操作(对于容器的操作可使用CONTAINER ID 或 NAMES)

  • 创建并启动容器

    创建容器命令:docker run 镜像名 参数
    创建容器常用的参数说明:
    -i:表示运行容器
    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    –name :为创建的容器命名。
    -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

  • 查看容器

    • 查看正在运行的容器:docker ps
    • 查看正在运行的容器:docker ps -q
    • 查看所有容器:docker ps -a
    • 查看停止的容器:docker ps -f status=exited
    • 查看运行容器总文件大小:docker ps -s
    • 查看最近创建的n个容器(这里n=5):docker ps -n 5
    • 查看正在运行容器[容器名=halo]的IP:ocker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' halo
  • 容器启动与停止

    • 启动一个已经被停止的容器:docker start CONTAINER_ID\NAMES
    • 重启容器:docker restart CONTAINER_ID\NAMES
    • 停止运行中的容器:docker stop CONTAINER_ID\NAMES
    • 杀掉运行中的容器:docker kill CONTAINER_ID\NAMES
  • 容器删除

    • 删除一个已停止的容器:docker rm CONTAINER_ID\NAMES
    • 强制删除一个运行中的容器:docker rm -f CONTAINER_ID\NAMES
    • 强制删除所有容器:docker rm -f $(docker ps -a -q)
  • 基于当前redis容器创建一个新的镜像

    参数:-a 提交的镜像作者;-c 使用Dockerfile指令来创建镜像;-m :提交时的说明文字;-p :在commit时,将容器暂停;命令如下:

    docker commit -a="Lundy" -m="my redis" [redis容器ID] myredis:v2.0

  • 网络管理

    • 随机分配端口号:docker run -P
    • 绑定特定端口号(主机的所有网络接口的5000端口均绑定容器的5000端口):docker run -p 5000:5000
    • 绑定主机的特定接口的端口号:docker run -p 127.0.0.1:5000:5000
    • 查看容器的5000端口对应本地机器的IP和端口号:docker port <CONTAINER_ID> 5000

PS: 目前很流行的说法是podman会代替docker; 但个人从开发角度认为,docker的易用性好于podman。podman需要搭配Buildah和Skopeo 工具才会更全面好用。如果从运维安全角度,可以优先考虑podman。从开发角度,还是建议docker

安装Kind

  • 下载kind到用户执行目录

    curl -Lo /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64

  • 添加执行权限

    chmod +x /usr/local/bin/kind

  • 验证安装成功

    kind -h

安装K8S

k8s需要依赖 kubelet、kubeadm、kubectl; 因此在安装k8s前需要先安装这3个组件;为了防止网络访问问题;推荐配置阿里云源镜像进行安装;具体安装步骤如下:

  • 配置阿里云源命令;复制以下命令粘贴到命令行窗口,然后回车即可:

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
  • 安装kubelet、kubeadm、kubectl这3个组件

    yum install kubelet kubeadm kubectl -y

  • 查看版本信息

    kubectl version --client

  • 创建k8s集群

    kind create cluster --name wsl2k8s

    踩坑记录: 在执行这一步创建k8s集群命令时,有可能会出现以下错误(本人第一次搭建时出现过):

    ERROR: failed to create cluster: failed to ensure docker network: command "docker network create -d=bridge -o com.docker.network.bridge.enable_ip_masquerade=true -o com.docker.network.driver.mtu=1500 --ipv6 --subnet fc00:f853:ccd:e793::/64 kind" failed with error: exit status 1

    出现此错误的原因为:Docker daemon默认只支持IPv4地址。

    解决方案参考:https://www.cnblogs.com/yangyuliufeng/p/9989812.html

    直接编辑/etc/docker/daemon.json文件,加入以下内容:

    { "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" }

    其中2001:db8:1::/64是IPv6地址段,非固定值,可根据需要修改。

    保存好daemon.json文件后,使用systemctl restart docker命令重启Docker,然后再重新执行指令创建k8s集群即可。

  • 创建成功后,我们通过下面的命令看下节点信息:

    kubectl cluster-info --context kind-wsl2k8s

    效果如图:

    image-20220119175818465

安装K8S图形化控制面板

图形化控制面板有多个,可根据个人喜好选择,以下介绍两种:

K8S原生Dashboard

  • 执行如下命令创建Dashboard节点

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

    可通过kubectl describe pod -n kubernetes-dashboard查看创建日志

    image-20220120102727007

    如上显示,节点创建成功!

  • 创建管理用户配置并获取token

    1. 创建yaml文件

      vim admin-user.yaml

    2. 添加文件内容,下面内容就是我们要创建的节点信息

      ---
      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
      
    3. k8s中创建:

      kubectl apply -f admin-user.yaml

      删除节点:kubectl delete -f admin-user.yaml

    4. 执行以下命令获取授权token

      kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

      image-20220120103533944

    5. 复制token备用:复制上一步的token字符串备用

  • 运行执行K8S代理命令(访问控制面板需要以代理的形式访问)

    kubectl proxy

    如需后台执行,则为:kubectl proxy &

  • 在浏览器中访问如下地址:

    http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/*#/error?namespace=kuboard*

    image-20220120103949715

    出现如上界面后,输入刚才获取的token,点击登录,即可进入控制台:

    image-20220120104143557

安装kuboard控制面板(此控制面板由国人开发 ,有中文界面)

  • 执行docker命令安装kuboard;具体命令如下:

    先执行 ifconfig ,查看docker的IP地址;记录下IP地址,后面有用(172.17.0.1image-20220120152328983

    查看官方部署文档; 部署命令如下:

    image-20220121113333116

    把命令中 KUBOARD_ENDPOINT 的内网IP改为Docker的IP地址,然后执行

    sudo docker run -d \
      --restart=unless-stopped \
      --name=kuboard \
      -p 10010:80/tcp \
      -p 10086:10081/tcp \
      -e KUBOARD_ENDPOINT="http://172.17.0.1:10010" \
      -e KUBOARD_AGENT_SERVER_TCP_PORT="10086" \
      -v /root/kuboard-data:/data \
      eipwork/kuboard:v3.3.0.6
    

    踩坑记录1:

    1. 注意上面启动命令中 KUBOARD_ENDPOINT 的内网IP,根据官方文档说明,这个IP不建议使用 127.0.0.1 或者 localhost ,所以我用的IP地址是docker IP地址:172.17.0.1;或者也可以使用127.0.0.2,但后面生成探针文件时,仍需要修改为Docker的IP地址:踩坑记录2
    2. 命令中的端口说明:80端口和10081端口分别为Kuboard 的 Web 服务端口和 Kuboard Agent Server 端口,不能更改!第4行和第6行的 10010 端口为为宿主机访问Kuboard的映射端口,可根据需要修改,但要保持一致!第5行和第7行的10086端口也可以根据需要修改,同样要保持一致!
  • 测试安装是否成功

    curl 172.17.0.1:10010

    image-20220121104811207

    如图显示则为安装成功。

  • 访问kuboard:在windows的浏览器中通过 localhost:10010或者 127.0.0.1:10010 访问kuboard

    image-20220121104919297

    默认登录信息:

    • 用户名: admin
    • 密 码: Kuboard123

    image-20220121105021799

    登录后的界面如上图

  • 添加K8S集群信息

    1. 点击添加集群,然后选择 agent,填入集群名称和集群描述,然后点“确定”

      image-20220121105138723

    2. 点“确定”后,进入如下界面:

      image-20220121110412467

      执行第一条生成探针指令:

      curl -k 'http://172.17.0.1:10010/kuboard-api/cluster/wsl2k8s/kind/KubernetesCluster/wsl2k8s/resource/installAgentToKubernetes?token=oFVF5kKOFV0470kTVCh6hxpZ5p4Y6pQc' > kuboard-agent.yaml

      踩坑记录2(如果前面运行的docker命令中没有使用docker的IP地址,则有此坑):

      执行 curl -k 'http://127.0.0.2:10010/kuboard-api/cluster/wsl2k8s/kind/KubernetesCluster/wsl2k8s/resource/installAgentToKubernetes?token=vQAz6C4eJY9AN0yjI4zNCB8kePhPVr6k' > kuboard-agent.yaml 此命令后,在本地生成了一个探针文件,然后我们需要把这个探针文件导入到k8s中,但在导入之前,我们必须要先修改下这个yaml文件,否则后面会出错;修改内容如下:

      • 先执行 ifconfig ,查看docker的IP地址image-20220120152328983

      • 记录下docker的IP地址(172.17.0.1),后面有用。

      • 执行文件编辑命令:vim kuboard-agent.yaml; 在文件中找到KUBOARD_ENDPOINTKUBORAD_AGENT_HOST,把下面的value中的ip改成我们wsldocker的地址;总共有两个地方(除了截图,往下翻还有),一定要全部改掉!

        image-20220121110707519

    3. 创建探针服务的命令,也就是页面上的第二行命令:

      kubectl apply -f ./kuboard-agent.yaml

      执行后,正常情况下,在kuboard网页上会出现以下提示:

      image-20220120153454628

      执行完毕后勾选“我已执行导入命令”

      image-20220120150938737

      勾选后,出现以上几个状态检查命令; 再次依次拷贝执行;

      kubectl get pods -n kuboard -o wide -l "k8s.kuboard.cn/name in (kuboard-agent-1f3x577, kuboard-agent-1f3x577-2)"

      image-20220120153608777

      看到如图状态,即为安装导入成功。

    4. 安装完成

PS: K8S很重,需要占用大量资源;我8GB内存的笔记本电脑,在wsl2搭建完K8S环境后,没有运行别的容器。内存占用就达到了80%以上;因此,如果仅个人开发,不建议使用K8S;推荐使用Portainer

安装Portainer

因为K8S非常占用资源,比较适用生产服务器上使用,更方便运维。

而对于日常开发,我更推荐另一款可视化的容器镜像的图形管理工具:Portainer;利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。以下为具体安装步骤:

  • 搜索镜像

    docker search portainer

    image-20220121161839768

    如图,搜索结果列出了各个版本的 Portainer ;值得一说的是,Portainer原生并不支持中文,但在大神做了汉化处理;因此我们选择第一个CE汉化版;如果习惯英文的,也可以选择官方版本。

  • 下载镜像

    docker pull 6053537/portainer-ce

  • 运行镜像

    docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce

  • 在浏览器访问管理界面:http://localhost:9000

    image-20220121162616986

    第一次访问需要设置用户密码;输入密码后点击创建用户即可

  • 选择本地环境–>local; 即可看到控制面板仪表盘信息;安装完成

    image-20220121162742419

    image-20220121162834047

    image-20220121162915871

举报

相关推荐

0 条评论