內網環境離線部署kubernetes,docker

內網環境離線部署k8s,docker

要全內網環境安裝docker、k8s和相關依賴,需要在內部提供k8s、docker和linux更新yum源和內部鏡像倉庫提供kubeadm需要的各鏡像。

一,內部yum源建立和內網docker、k8s安裝

創建內部docker介質yum源

因爲docker版本對linux相關包的依賴包括了對extra下的container-selinux版本要求,因此需要通過國內外網環境的linux base和extra源來建立本地docker源。

1,添加linux介質源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2, 添加docker介質源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge

3, 通過如下命令download遠程yum源文件,建立本地docker repo庫

yumdownloader --resolve docker-ce  --destdir /root/docker-ce 
##或者yum install --downloadonly --downloaddir=/mnt/docker-ce docker-ce
createrepo -d /mnt/docker-ce

注:如果yumdownloader,createrepo工具不存在,可以通過linux base repo進行安裝。

創建內部k8s介質yum源

通過國內外網可用kubernetes源建立本地源,比如可以通過aliyun來建立本地yum源。

1,添加aliyun提供的k8s下載鏡像

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

2, 執行如下命令download遠程yum源文件,建立本地repo庫

yumdownloader --resolve kubeadm --destdir /mnt/k8s
createrepo -d /mnt/k8s

如上操作將在本地/mnt/docker-ce建立docker可安裝yum源、在/mnt/k8s下建立kubernetes可安裝yum源,通過http服務提供其他主機安裝,比如,通過如下配置nginx服務對外提供下載。nginx.conf關鍵配置如下:

server {
    listen          80;
    server_name     yum.serve;
    server_name     public.serve;
    server_name     package.wcj.me;
    access_log      /usr/local/nginx/logs/share.access.log ;
    error_log       /usr/local/nginx/logs/share.error.log;

    location / {
            root                    /mnt;
                autoindex               on;
                autoindex_exact_size    on;
                autoindex_localtime     on;
        }
}

內網其他機器可以配置/etc/yum.conf或添加這些yum repo。

[os-repo]
name=os repo
baseurl=http://192.168.100.70:9080/nfs
enabled=1
gpgcheck=0
skip_if_unavailable=1

[k8s-repo]
name=k8s repo
baseurl=http://192.168.100.70:9080/k8s
enabled=1
gpgcheck=0
skip_if_unavailable=1

[docker-repo]
name=docker repo
baseurl=http://192.168.100.70:9080/docker-ce
enabled=1
gpgcheck=0
skip_if_unavailable=1

這樣配置後,內網其他主機均可通過該機器方便地安裝docker,kubeadm等。

yum clean all
yum install -y docker-ce
yum install -y kubeadm

二、kubeadm依賴鏡像庫建立

kubeadm在進行集羣建立和管理時,只能讀取默認k8s.gcr.io倉庫下的鏡像。

kubeadm config images list
……falling back to the local client version: v1.15.3
k8s.gcr.io/kube-apiserver:v1.15.3
k8s.gcr.io/kube-controller-manager:v1.15.3
k8s.gcr.io/kube-scheduler:v1.15.3
k8s.gcr.io/kube-proxy:v1.15.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

因此,要建立本地鏡像倉庫,並使用其爲kubeadm提供鏡像服務。可以在各主機/etc/hosts文件設置k8s.gcr.io指向本地registry庫所在主機,並將本地registry服務啓動到80端口。

1, 通過國內外網可用google鏡像源下載k8s各鏡像

kubeadm config print init-defaults > kubeadm.yml

修改替換kubeadm.yml中imageRepository: k8s.gcr.io 爲如下可用國內鏡像。

  • gcr.azk8s.cn/google-containers
  • quay.azk8s.cn/coreos
  • dockerhub.azk8s.cn/library/centos
  • mirrorgooglecontainers/google-containers
  • registry.cn-hangzhou.aliyuncs.com/google_containers
  • 配置使用daoCloud國內鏡像加速

    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
    
    # cat /etc/docker/daemon.json
    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
    
      "insecure-registries": [ "k8s.gcr.io" ]
    }
    
    

    比如如下修改kubeadm.yml

    cat kubeadm.yml 
    imageRepository: gcr.azk8s.cn/google-containers
    kind: ClusterConfiguration
    kubernetesVersion: v1.15.3
    

    通過如下命令下載鏡像。

    kubeadm config images pull --config kubeadm.yml
    

    通過命令將下載的鏡像tag修改爲k8s.gcr.io。

    for r in $(kubeadm config images list --config kubeadm.yml);do rsv=($(docker image ls $r|tail -n 1));image=$(echo ${rsv[0]}|awk -F / '{print $NF}');tag=${rsv[1]}; docker tag $r k8s.gcr.io/$image:$tag;docker rmi -f $r; done
    
    

    ARM64平臺下拉取kubeadm以來k8s鏡像示例腳本:

    #!/bin/bash
    
    
    repos=$(kubeadm config images list 2>/dev/null | grep "k8s.gcr.io" )
    
    mirror=mirrorgcrio
    
    for repo in ${repos};
    do
    
    iv=$(echo $repo|awk -F / '{print $NF}')
    
    #docker rmi -f $repo
    
    image=$(echo $iv|cut -d ':' -f 1)
    version=$(echo $iv|cut -d ':' -f 2)
    
    if [[ $image == "coredns" ]];then
    mrepo="coredns/"$image:$version
    else
    mrepo=$mirror/$image-arm64:$version
    fi
    
    exts=$(docker image ls $mrepo|grep $image|wc -l)
    
    if [[ $exts -lt 1 ]];then
    docker pull $mrepo
    fi
    
    docker tag $mrepo $repo
    ######a local host named k8s.gcr.io registry started by   docker run -d --rm -v $(pwd)/vg:/var/lib/registry -p 80:5000 --name registry registry
    
    docker push $repo
    
    done
    
    

    2, 建立本地registry庫,並上傳鏡像

    修改內部各主機/etc/hosts和docker配置指向內部主機k8s.gcr.io。比如:

    [root@zhannk1 ~]# cat /etc/hosts
    ……
    192.168.100.70  zhannk k8s.gcr.io
    ……
    
    [root@zhannk1 ~]# cat /etc/docker/daemon.json
    {
    
      "insecure-registries": [ "k8s.gcr.io" ]
    }
    

    在80端口啓動registry,這個可以方便其他主機通過內部k8s.gcr.io下載鏡像。

    docker run -d  -v /root/vg:/var/lib/registry -p 80:5000 --name registry registry
    

    將鏡像上傳到registry。

    IFS=$'\n';for line in $(docker images |grep k8s.gcr.io);do unset IFS; ia=($line);  docker push ${ia[0]}:${ia[1]}; done
    

    在內網其他主機可以用dockers驗證是否可以下載這些鏡像:

    docker pull k8s.gcr.io/kube-proxy:v1.15.3 
    

    通過上面的設置可以在內網環境完成kubeadm、docker和k8s.gcr.io相關鏡像的全內網方式訪問。

    三、使用kubeadm創建集羣

    通過kubeadm創建管理k8s集羣的方式,k8s各服務均以static pod的方式運行,由kubelet進行自動管理。 本文檔採用kube-router作爲k8s網絡方案創建k8s集羣(The combination of BGP for inter-node Pod networking and IPVS for load balanced proxy Services is a perfect recipe for high-performance cluster networking at scale.v)。

    –to be continued

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章