• 通过kubeadm安装kubernetes 1.13.2


    【摘要】 单机安装Kubernetes v1.13.2, 使用Flannel并开启IPVS

    1, k8s节点准备工作 

      在每个master和node节点上准备如下工作

    #1 设置并记下Master/Nodes节点之间以及内外直接NodePort通信所需的网络接口名,其IP作为Node IP。
    
    #2 编辑/etc/fstab,关掉swap分区(需要重启后生效)
    #/swap.img      none    swap    sw      0       0
    
    #3 设置好/var/lib/docker目录, 可以在/etc/fstab里挂载一个单独磁盘
    /dev/sdb on /var/lib/docker type ext4 (rw,relatime,data=ordered)
    
    #4 安装必要软件和下载工具
    apt-get update
    apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
    #5 若apt访问仓库需要代理,设置/etc/apt/apt.conf:
    cat /etc/apt/apt.conf:
    Acquire::http::Proxy "http://代理服务器IP:端口";
    Acquire::https::Proxy "http://代理服务器IP:端口";
    #6 移除ubuntu自带的docker.io并安装docker-ce
    apt-get remove docker docker-engine docker.io containerd runc
    apt-key fingerprint 0EBFCD88
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    apt-get install -y docker-ce
    #7 若docker访问仓库需要代理,设置如下文件:
    cat /etc/systemd/system/docker.service.d//http-proxy.conf:
    [Service]
    Environment="HTTP_PROXY=http://代理服务器IP:端口/" 
    
    cat /etc/systemd/system/docker.service.d//https-proxy.conf:
    [Service]
    Environment="HTTPS_PROXY=http://代理服务器IP:端口/"
    #8 增加k8s软件包源到apt的库表(bionic对应表没有放出来暂时用xenial代替)
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    echo 'deb https://apt.kubernetes.io/ kubernetes-xenial main' >> /etc/apt/sources.list.d/kubernetes.list
    #9 按装kubeadm即可安装kubeadm kubelet kubectl kubernetes-cni
    sudo apt-get update
    sudo apt-get install -y kubeadm
    sudo apt-mark hold kubelet kubeadm kubectl
    # 若事后发现网络有问题,可apt-get remove kubernetes-cni再单独重装
    # 若事后发现k8s和docker在cgroupfs和systemd的drivers上不一致导致问题,可参考如下解决:
    修改kubelet的启动配置文件/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
    最后一个Environment后面增加一行:
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
    最后一个ExecStart行的$KUBELET_EXTRA_ARGS之前增加$KUBELET_CGROUP_ARGS:
    ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_CGROUP_ARGS $KUBELET_EXTRA_ARGS
    执行生效并确认kubelet服务重启OK:
    systemctl daemon-reload
    systemctl restart kubelet
    systemctl status kubelet
    #10 预先下载kubeadm init所需镜像
    #方法1:网络直通gcr.io或者FQ可通(博客另文有述), 执行kubeadm config image pull
    #方法2:根据方法1得到镜像'k8s.gcr.io/镜像名'清单,从其他完成的node上执行 'docker save k8s.gcr.io/镜像名 > 镜像名.tar', 然后拷贝到本机执行 'docker load 镜像名' 加载进来
    #方法3:从阿里云等替代源docker pull下来,tag为k8s.gcr.io前缀。新前缀镜像可以push到自己的仓库,也可以save出来备用。原有前缀可以docker rmi删除之。
    #方法4:从阿里云等替代源docker pull下来,执行kubeadm init初始化之前修改kubeadm配置文件使用阿里源前缀。
    例如1.13.2需要的镜像如下:
    k8s.gcr.io/kube-proxy                v1.13.2             01cfa56edcfc        12 days ago         80.3MB
    k8s.gcr.io/kube-apiserver            v1.13.2             177db4b8e93a        12 days ago         181MB
    k8s.gcr.io/kube-controller-manager   v1.13.2             b9027a78d94c        12 days ago         146MB
    k8s.gcr.io/kube-scheduler            v1.13.2             3193be46e0b3        12 days ago         79.6MB
    k8s.gcr.io/coredns                   1.2.6               f59dcacceff4        2 months ago        40MB
    k8s.gcr.io/etcd                      3.2.24              3cab8e1b9802        4 months ago        220MB
    gcr.io/kubernetes-helm/tiller        v2.9.1              6253045f26c6        8 months ago        36.1MB
    quay.io/coreos/flannel               v0.10.0-amd64       f0fad859c909        12 months ago       44.6MB
    k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        13 months ago       742kB

    2, 运行一键k8s安装

    kubeadm init  --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<master_node_ip>

    3, 为跨节点互通安装flannel

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    这个文件里面搜flanneld有五个不同架构下的DaemonSet配置, 需要在amd64架构那个DaemonSet的args下增加--iface <node-ip-iface-name>

    然后执行:

    kubectl apply -f kube-flannel.yml

    4, 让dns等pod也能在master node上驻扎

    若只有master一个节点,coredns的某些pod可能不能启动,需要node去污点解决:

    kubect get nodes

    kubectl taint nodes <node_name> node-role.kubernetes.io/master-

    kubectl get pods --all-namespace 确保一切pod进入running状态, 否则用kubectl -n kube-system logs <pod-name>查看问题

    5, 开启ipvs

    集群的svc和pod数量较多会导致iptabes的DNAT规则剧增性能难看,需要开启ipset+ipvs去承担DNAT工作:

    -- 安装必须包: 

    apt install ipset ipvsadm

    -- 确保mod存在: 

    for i in ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4; do modprobe $i; done

    lsmod | grep -e ip_vs -e nf_conntrack_ipv4

    -- 编辑etcd里的ConfigMap:

    kubectl edit cm kube-proxy -n kube-system, 修改为 mode: "ipvs"

    -- 删除kube-proxy全部pods使之重建: 

    kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

    参考文档

    https://www.kubernetes.org.cn/4956.html

    来源:华为云社区  作者:divfor

  • 相关阅读:
    Flutter页面-基础Widget
    Data 方法、异常与类
    kafka手动设置offset
    centos 安装ftp服务BUG
    定时任务
    Java垃圾收集算法
    ByteBuffer数据结构
    HelloWorldDynamic
    HelloWorld
    sql技巧(增册改查)
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165749.html
Copyright © 2020-2023  润新知