• k8s部署


    部署过程

      Kubernetes 计划弃用 kubelet 中 Docker Engine 支持,对于 dockershim 的支持也将在1.21版本中放弃。

      不过不必担心,在目前 Kubernetes v1.20 中,Kubernetes 管理员可以继续使用 Docker 命令与 kubectl 命令管理 Kubernetes 集群,而且镜像使用不会受到任何影响。在未来发布的 Kubernetes 版本中,包括接下来陆续推出的次要版本,对于 dockershim 的支持将最终被移除(最早会在 v1.23 把 Dockershim 从 Kubelet 中移除),届时将无法使用 Docker 命令检查集群。

    1、配置基础环境

    关闭防火墙:

    systemctl disable firewalld
    systemctl stop firewalld

    关闭selinux:

    setenforce 0
    sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config

    关闭swap:

    -a: 关闭配置文件“/etc/fstab” 中所有的交换空间。
    注释swap行
    swapoff -a
    sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

     一、安装Docker引擎:

    你可以以不同的方式安装 Docker engine,这取决于你的需求:
        1、大多数用户从Docker的仓库安装,为了便于安装和升级的任务。 这是的推荐的方法。
        2、下载的rpm包、手动安装和管理,升级完全是手工操作。 安装docker的系统没有接入互联网的情况下非常有用。
        3、在测试的环境中,某些用户选择使用自动化便利脚本以安装Docker.

    1、安装docker储存库

    第一次在一个新的主机安装Docker引擎之前,你需要设立Docker库。 之后,你可以从储存库中安装和更新Docker 。

    sudo yum install -y yum-utils
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

    2、安装Docker引擎

    sudo yum install docker-ce docker-ce-cli containerd.io

    a. 列出所有可用的版本

    yum list docker-ce --showduplicates | sort -r

    b. 安装一个具体版本通过其完全合格的包名称,这是 包名( docker-ce)加version string(第2栏) 在开始的第一号( :),第一连字符的,由分 连字号( -). 例如, docker-ce-18.09.1.

    yum install docker-ce-17.12.1.ce
    sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

    c. 开启docker

    systemctl enable docker && systemctl start docker

    d. 验证Docker引擎是正确安装运行 hello-world 镜像。

    sudo docker run hello-world

    3、修改cgroup driver

    不改就会报下列错误:

    ID:H7RI:P37O:UH5W:VRQ:TDKT:D3MZ:YGJ4:3ZOU:7DDY:YYPQ:DPWM:ERFV Containers:0 ContainersRunning:0 ContainersPaused:0 Contain
    to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\"

    根据报错信息知道,是因为 k8s 和docker 的 cgroup driver 不一致导致的。k8s 的是 systemd ,而 docker 是cgroupfs。

    修改docker的cgroup driver,顺便修改一下镜像源:

    cat << EOF > /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF

    可以通过docker info 查看docker的Cgroup Driver:

    [root@k8s-master ~]# docker info | grep Cgroup
    Client:
    ...
    Server:
    ...
    Cgroup Driver: cgroupfs


    然后重启docker

    systemctl restart docker

    再看

    [root@k8s-master ~]# docker info | grep Cgroup
    Cgroup Driver: systemd

    二、安装Kubernetes

    1、安装kubelet和kubeadm及kubectl

    kubernetes源配置文件:

    cat << EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=kubernetes repository
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enable=1
    gpgcheck=0
    EOF

    安装并启动kube*

    yum install -y kubelet-1.18.0  kubeadm-1.18.0  kubectl-1.18.0 --disableexcludes=kubernetes
    systemctl enable kubelet && systemctl start kubelet
    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    systemctl enable kubelet && systemctl start kubelet

    3、kubeadm初始化k8s

     默认情况下kubeadm要下载k8s.gcr.io的docker镜像,但是国内连不上https://k8s.gcr.io/v2/。

    3.1 修改镜像仓库地址:

    kubeadm config print init-defaults > init.default.yaml

    将 imageRepository: k8s.gcr.io 改成 imageRepository:registry.aliyuncs.com/google_containers

    cat  init.default.yaml

    apiVersion: kubeadm.k8s.io/v1beta3
    bootstrapTokens:
    - groups:
      - system:bootstrappers:kubeadm:default-node-token
      token: abcdef.0123456789abcdef
      ttl: 24h0m0s
      usages:
      - signing
      - authentication
    kind: InitConfiguration
    localAPIEndpoint:
      advertiseAddress: 1.2.3.4
      bindPort: 6443
    nodeRegistration:
      criSocket: /var/run/dockershim.sock
      imagePullPolicy: IfNotPresent
      name: node
      taints: null
    ---
    apiServer:
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta3
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controllerManager: {}
    dns: {}
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: registry.aliyuncs.com/google_containers
    kind: ClusterConfiguration
    kubernetesVersion: 1.23.0
    networking:
      dnsDomain: cluster.local
      serviceSubnet: 10.96.0.0/12
    scheduler: {}
    

     下载Kubernetes的相关镜像:

    kubeadm config images pull --config=init.default.yaml

     运行kubeadm init命令安装master:

    kubeadm init --config=init.default.yaml

    故障二:

    [root@localhost ~]# kubeadm init
    [init] Using Kubernetes version: v1.23.5
    [preflight] Running pre-flight checks
    error execution phase preflight: [preflight] Some fatal errors occurred:
            [ERROR Port-10259]: Port 10259 is in use
            [ERROR Port-10257]: Port 10257 is in use
            [ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
            [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
            [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
            [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists

    解决方案:

     提示端口或者文件已经存在,想通过关闭服务和删除文件是无法解决问题的。可以通过kubeadm reset清空kubeadm init 或 kubeadm join 所做的更改。

    kubeadm reset

    如果使用的是外部的etcd,kubeamd不会删除任何etcd数据。这个命令主要用于我们在做实验的过程中,擦除实验环境,切不可用到生产环境中。

    执行完上述命令后需注意一下4点:

    重置过程不会清除CNI配置。为此,必须删除/etc/cni/net.d
    重置过程不会重置或清理iptables规则或IPVS表。如果希望重置iptables,必须使用“iptables”命令手动重置。
    如果您的集群被设置为使用IPV,请运行ipvsadm --clear(或类似)来重置系统的IPV表。
    重置过程不会清理kubeconfig文件,您必须手动删除它们。请检查$HOME/的内容。kube/config文件。
    

     删除net.d 和 config

    rm -rf /etc/cni/net.d
    rm -rf $HOME/.kube/config

    使用下面的命令获取需要的docker镜像名称:

    [root@k8s-master ~]# kubeadm config images list
    k8s.gcr.io/kube-apiserver:v1.23.5
    k8s.gcr.io/kube-controller-manager:v1.23.5
    k8s.gcr.io/kube-scheduler:v1.23.5
    k8s.gcr.io/kube-proxy:v1.23.5
    k8s.gcr.io/pause:3.6
    k8s.gcr.io/etcd:3.5.1-0
    k8s.gcr.io/coredns/coredns:v1.8.6
    

    具体解决方式:

    https://www.freesion.com/article/20831079183/

    通过指定的仓库下载需要的镜像:

    kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
    #!/bin/bash
    DIZHI="registry.aliyuncs.com/google_containers"
    VERSION="v1.23.5"
    docker tag $DIZHI/kube-apiserver:$VERSION k8s.gcr.io/kube-apiserver:$VERSION
    docker tag $DIZHI/kube-controller-manager:$VERSION k8s.gcr.io/kube-controller-manager:$VERSION
    docker tag $DIZHI/kube-scheduler:$VERSION k8s.gcr.io/kube-scheduler:$VERSION
    docker tag $DIZHI/kube-proxy:$VERSION k8s.gcr.io/kube-proxy:$VERSION
    docker tag $DIZHI/pause:3.6 k8s.gcr.io/pause:3.6
    docker tag $DIZHI/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0
    docker tag $DIZHI/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
    docker rmi $DIZHI/kube-apiserver:$VERSION
    docker rmi $DIZHI/kube-controller-manager:$VERSION
    docker rmi $DIZHI/kube-scheduler:$VERSION
    docker rmi $DIZHI/kube-proxy:$VERSION
    docker rmi $DIZHI/pause:3.6
    docker rmi $DIZHI/etcd:3.5.1-0
    docker rmi $DIZHI/coredns:v1.8.6
    
    kubeadm init

    之后会生成:

        [root@localhost rpm]# cd  /var/lib/kubelet/
        [root@localhost kubelet]# ls -l
        total 12
        -rw-r--r--. 1 root root 1609 Jun 24 23:40 config.yaml
        -rw-r--r--. 1 root root   40 Jun 24 23:40 cpu_manager_state
        drwxr-xr-x. 2 root root   61 Jun 24 23:41 device-plugins
        -rw-r--r--. 1 root root  124 Jun 24 23:40 kubeadm-flags.env
        drwxr-xr-x. 2 root root  170 Jun 24 23:41 pki
        drwx------. 2 root root    6 Jun 24 23:40 plugin-containers
        drwxr-x---. 2 root root    6 Jun 24 23:40 plugins
        drwxr-x---. 7 root root  210 Jun 24 23:41 pods

    https://blog.51cto.com/8999a/5005591

    0501部署问题汇总:

    1\在初始化k8s的时候警告17.12不在已验证版本列表中,最新验证版本19.3。

    this Docker version is not on the list of validated versions: 17.12.1-ce. Latest validated version: 19.03

    要做的工作:

    验证docker19.03版本

     k8s重启后node节点notready_Centos8下K8S master节点更换IP https://blog.csdn.net/weixin_42447265/article/details/113628771

    windows docker toolbox 启动容器遇到问题: cgroups: cannot find cgroup mount destination: unknown.   https://blog.csdn.net/weixin_43343144/article/details/107485509

     https://www.freeaihub.com/post/104828.html

    http://blog.itpub.net/28833846/viewspace-2841519/

    https://blog.csdn.net/songcf_faith/article/details/82749011

    https://blog.csdn.net/weixin_42663840/article/details/102633206

     
  • 相关阅读:
    解决 Windows 资源管理器 CPU 占用率很高的问题
    彻底卸载Cygwin
    Cygwin 快速镜像站点
    解决 cygwin 在 win10 下中文显示乱码的问题
    酷派大神 F1 连接调试,日志获取的方法
    陌路
    游戏开发中自定义脚本与配置
    在 cygwin 的环境下调用 libgdx gdx-tools
    在 cygwin 的环境下使用 git 的时候中文编码的问题
    对 android apk 进行重新签名操作
  • 原文地址:https://www.cnblogs.com/linuxws/p/16044051.html
Copyright © 2020-2023  润新知