zoukankan      html  css  js  c++  java
  • Win10基于docker的centos镜像搭建kubebuilder

    Win10基于docker的centos镜像搭建kubebuilder

    主要分为

    • docker安装centos
    • centos安装go
    • win10启动minikube
    • centos中配置kubeconfig
    • 安装kubebuilder
    • 初始化项目及create api

    1.docker容器下载centos image并安装

    docker pull centos:7
    docker images
    

    查看imageid,基于该镜像创建容器

    #指定容器名称为centos7
    #-d 后台运行,返回容器ID
    #-i交互式运行 -t为容器分片一个伪输入终端
    #-v 绑定一个卷
    docker run --name centos7 -d -i -t -v /d/workspace/docker/data:/data eeb6ee3f44bd /bin/bash
    
    #查看容器id,进入容器
    docker exec -it bc76a bash
    
    #安装ifconfig,并查看ip
    yum install net-tools -y
    

    2.安装go

    由于kubebuilder对go语言版本很敏感,因此不适于yum install golang的方式,采用自己下载对应版本

    在/usr/local目录下载并解压

    #先yum install wget
    wget https://dl.google.com/go/go1.16.9.linux-amd64.tar.gz --no-check-certificate
    tar -zxf go1.16.9.linux-amd64.tar.gz 
    

    编辑环境变量配置

    vi /etc/profile
    
    #golang env config
    export GO111MODULE=on
    export GOROOT=/usr/local/go 
    export GOPATH=/home/gopath
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    export GOPROXY=https://goproxy.cn,direct
    #切换proxy,解决下载代码x509问题
    #go env -w GOPROXY=https://goproxy.cn,direct
    

    source /etc/profile使之生效

    使用go version命令查看版本

    [root@d7b3fb5aa6ce guestbook]# go version
    go version go1.16.9 linux/amd64
    

    同时创建GO Path目录/home/gopath

    安装kubectl

    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    
    install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    kubectl version --client
    

    win10启动minikube

    minikube不推荐在局域网中使用,因此,默认的集群只能使用127.0.0.1来访问,因此centos7容器中的kubebuilder是无法访问的,因此,启动minikube的方式需要调整

    #指定non-local traffic可访问,并指定ip(xxx换成本机局域网ip)
    minikube start --driver=docker --listen-address=0.0.0.0 --apiserver-ips=xxx 
    #minikube start --driver=docker 常规方式启动
    

    启动minikube后,使用以下命令获取config

    kubectl config view --minify --flatten
    

    将其内容中clusters/server中的127.0.0.1改为本机ip,此时的config可以被centos中的kubebuilder访问到了

    centos中配置kubeconfig

    将minikube config中的内容拷贝到centos的~/.kube/config中

    使用命令测试

    sh-4.2# kubectl get ns
    NAME              STATUS   AGE
    default           Active   18m
    kube-node-lease   Active   18m
    kube-public       Active   18m
    kube-system       Active   18m
    

    ok,连接minikube成功

    安装kubebuilder

    curl -L -o kubebuilder https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH) -k
    chmod +x kubebuilder && mv kubebuilder /usr/local/bin/
    
    

    使用kubebuilder version查看版本

    [root@d7b3fb5aa6ce guestbook]# kubebuilder version
    Version: main.version{KubeBuilderVersion:"3.1.0", KubernetesVendor:"1.19.2", GitCommit:"92e0349ca7334a0a8e5e499da4fb077eb524e94a", BuildDate:"2021-05-27T17:54:28Z", GoOs:"linux", GoArch:"amd64"}
    

    初始化项目

    我们在启动容器时挂载了目录,因此工作目录需创建到/data中

    mkdir -p /data/guestbook
    cd /data/guestbook
    
    kubebuilder init  --domain my.domain --repo my.domain/guestbook
    #先安装make
    yum -y install gcc automake autoconf libtool make
    yum install gcc gcc-c++
    
    kubebuilder create api --group webapp --version v1 --kind Guestbook
    

    此时win10的文件目录下可看到刚才生成的代码

    此时就可以用Win10上的IDE工具打开这个项目了

    run

    使用make install安装crd

    sh-4.2# kubectl get crd
    NAME                          CREATED AT
    guestbooks.webapp.my.domain   2021-10-21T12:28:28Z
    

    run程序

    sh-4.2# make run
    /data/guestbook/bin/controller-gen "crd:trivialVersions=true,preserveUnknownFields=false" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
    /data/guestbook/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
    go fmt ./...
    go vet ./...
    go run ./main.go
    2021-10-21T12:30:01.475Z        INFO    controller-runtime.metrics      metrics server is starting to listen    {"addr": ":8080"}
    2021-10-21T12:30:01.476Z        INFO    setup   starting manager
    2021-10-21T12:30:01.476Z        INFO    controller-runtime.manager      starting metrics server {"path": "/metrics"}
    2021-10-21T12:30:01.476Z        INFO    controller-runtime.manager.controller.guestbook Starting EventSource    {"reconciler group": "webapp.my.domain", "reconciler kind": "Guestbook", "source": "kind source: /, Kind="}
    2021-10-21T12:30:01.577Z        INFO    controller-runtime.manager.controller.guestbook Starting Controller     {"reconciler group": "webapp.my.domain", "reconciler kind": "Guestbook"}
    2021-10-21T12:30:01.577Z        INFO    controller-runtime.manager.controller.guestbook Starting workers        {"reconciler group": "webapp.my.domain", "reconciler kind": "Guestbook", "worker count": 1}
    
    #部署一个测试的CRD
    kubectl apply -f config/samples/webapp_v1_guestbook.yaml
    

    make run控制台打印对应log

  • 相关阅读:
    数据库备份 DBS(Database Backup),知识点
    关系型数据库 RDS(Relational Database Service),知识点
    对象存储服务 OSS(Object Storage Service),知识点(待补充上仓库代码)
    Java 为什么需要包装类,如何使用包装类?
    for each 语句
    缓存中,2个注解:@cacheable 与 @cacheput 的区别
    微信小程序,相关代码
    微信小程序中的事件
    通俗易懂:索引、单列索引、复合索引、主键、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的区别与联系
    MySQL 的各种 join
  • 原文地址:https://www.cnblogs.com/windliu/p/15458863.html
Copyright © 2011-2022 走看看