• kubeadm部署高可用master


    准备阶段

    master1  master2  master3 node1

    关闭selinux,firewall

    setenforce  0

    sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

    systemctl stop firewalld

    systemctl disable firewalld

    关闭swap,(1.8版本后的要求,目的应该是不想让swap干扰pod可使用的内存limit)

    swapoff -a

    sed -ri 's/.*swap.*/#&/' /etc/fstab

    修改下面内核参数,否则请求数据经过iptables的路由可能有问题

    cat <<EOF >  /etc/sysctl.d/k8s.conf

    net.bridge.bridge-nf-call-ip6tables = 1

    net.bridge.bridge-nf-call-iptables = 1

    EOF

    sysctl --system

     

     

    安装kubeadm、docker

    将Kubernetes安装源改为阿里云,方便国内网络环境安装

    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=0

    EOF

     

    安装docker-ce

    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    yum install -y docker-ce

     

    安装kubelet kubeadm kubectl

    yum install kubeadm-1.15.0-0.x86_64 kubectl-1.15.0-0.x86_64 kubelet-1.15.0-0.x86_64 -y

     

    kubectl命令自动补全

    yum install bash-completion* -y

    ##写入环境变量

    source <(kubectl completion bash)

    echo "source <(kubectl completion bash)" >> ~/.bashrc

     

    安装keepalived,配置虚拟IP为192.168.81.100

    启动kubelet,docker并设置开机启动

     

    部署Kubernetes

    在master-1节点操作:

    准备集群配置文件,目前用的api版本为v1beta1,具体配置可以参考官方reference

    cat << EOF > /root/kubeadm-config.yaml

    apiVersion: kubeadm.k8s.io/v1beta1

    kind: ClusterConfiguration

    kubernetesVersion: v1.15.0 # 指定1.15版本

    controlPlaneEndpoint: 192.168.81.10:6443 # haproxy地址及端口

    imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers # 指定镜像源为阿里源

    networking:

      podSubnet: 10.244.0.0/16 # 计划使用flannel网络插件,指定pod网段及掩码

    EOF

    执行节点初始化

    systemctl enable kubelet

    systemctl start kubelet

    kubeadm config images pull --config kubeadm-config.yaml  # 通过阿里源预先拉镜像

    kubeadm init --config=kubeadm-config.yaml --upload-certs --ignore-preflight-errors=all

    kubeadm init  --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16  --service-cidr=10.96.0.0/12 --ignore-preflight-errors=all --upload-certs

     

    安装成功,可以看到输出

    You can now join any number of the control-plane node running the following command on each as root:

    # master节点用以下命令加入集群:

      kubeadm join 192.168.81.100:6443 --token ocb5tz.pv252zn76rl4l3f6

        --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2

        --experimental-control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826 --ignore-preflight-errors=all

    # 工作节点用以下命令加入集群:

    kubeadm join 192.168.81.100:6443 --token ocb5tz.pv252zn76rl4l3f6

        --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 --ignore-preflight-errors=all 

     

    原来的kubeadm版本,join命令只用于工作节点的加入,而新版本加入了 --control-plane 参数后,控制平面(master)节点也可以通过kubeadm join命令加入集群了。

    添加kubectl控制权限

    mkdir -p $HOME/.kube

    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    chown $(id -u):$(id -g) $HOME/.kube/config

     

     

    加入另外一个master节点

    在master-2操作:

    kubeadm join 192.168.81.100:6443 --token ocb5tz.pv252zn76rl4l3f6

    --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2

    --experimental-control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826

    --ignore-preflight-errors=all

    添加kubectl控制权限

    mkdir -p $HOME/.kube

    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    chown $(id -u):$(id -g) $HOME/.kube/config

     

     

    notready状态

    编辑 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf文件(有的是/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf文件),
    ​ 删除最后一行里的$KUBELET_NETWORK_ARGS

    systemctl restart kubelet

     

     

    安装网络插件

    kubectl apply –f kube-flannel.yml

     

     

    再次查看节点状态

    kubectl get nodes

     

     

    参考:

    kube-flannel网络插件:https://www.wanghaiqing.com/article/aa3ac027-7ae8-43ff-821e-49f6dfcd17e8/

    kubeadm高可用:https://segmentfault.com/a/1190000018741112?utm_source=tag-newest

    notready参照:https://www.cnblogs.com/zhongyuanzhao000/p/11401031.html

     

  • 相关阅读:
    (笔记)Linux内核学习(二)之进程
    (笔记)Linux内核学习(一)之内核介绍
    状态机思路在程序设计中的应用
    内存操作函数memmove,memcpy,memset
    linux下常用的几个时间函数:time,gettimeofday,clock_gettime,_ftime
    Camera ISO、快门、光圈、曝光这几个概念
    C语言中的指针和内存泄漏几种情况
    音视频文件码率与大小计算
    CC++中 fopen中文件打开方式的区别:
    常用DOS命令
  • 原文地址:https://www.cnblogs.com/leiwenbin627/p/11595921.html
Copyright © 2020-2023  润新知