美文网首页
k8s v1.12.2部署与dashboard安装

k8s v1.12.2部署与dashboard安装

作者: 嘿小逗比就是你 | 来源:发表于2018-12-04 10:58 被阅读0次

    1 系统准备

    1.1 关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    

    1.2 禁用SELinux

    root@localhost ~]# setenforce 0 //临时关闭
    [root@localhost ~]# getenforce
    Permissive
    [root@localhost ~]# vim /etc/sysconfig/selinux //永久关闭
    将SELINUX=enforcing 改为 SELINUX=disabled 。

    1.3 关闭系统Swap

    Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。方法一,通过kubelet的启动参数–fail-swap-on=false更改这个限制。方法二,关闭系统的Swap。

    swapoff -a 
    

    并修改/etc/fstab文件,注释掉SWAP的自动挂载,使用free -m确认swap已经关闭。

    1.4 安装docker

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum makecache fast
    sudo yum -y install docker-ce
    systemctl enable docker.service
    systemctl restart docker
    

    2 使用kubeadm部署Kubernetes

    2.1 安装kubeadm和kubelet

    在各节点安装kubeadm和kubelet:

    # 配置源
    $ 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
    
    yum makecache fast
    

    查看可安装的版本
    yum list kubelet --showduplicates | sort -r
    yum list kubeadm --showduplicates | sort -r
    安装kubeadm、kubectl、kubelet:
    本次部署使用1.12.2版本

    # 安装指定版本
    $ yum install -y kubelet-1.12.2-0 kubeadm-1.12.2-0 kubectl-1.12.2-0 ipvsadm
    

    Kubernetes 1.8开始要求关闭系统的Swap,如果不关闭,默认配置下kubelet将无法启动。
    swapoff -a
    vm.swappiness=0
    修改/etc/sysconfig/kubelet,加入:
    KUBELET_EXTRA_ARGS=--fail-swap-on=false

    # 启动
    $ systemctl daemon-reload
    $ systemctl enable kubelet && systemctl restart kubelet
    

    安装完成查看需要的images

    kubeadm config images list
    

    根据查看images,可以看到所需镜像,由于网络原因,请下载我在docker hub上的镜像。

    docker pull hyxxy/kube-apiserver:v1.12.2
    docker pull hyxxy/kube-controller-manager:v1.12.2
    docker pull hyxxy/kube-scheduler:v1.12.2
    docker pull hyxxy/kube-proxy:v1.12.2
    docker pull hyxxy/pause:3.1
    docker pull hyxxy/etcd:3.2.24
    docker pull hyxxy/coredns:1.2.2
    docker pull hyxxy/coreos/flannel:v0.10.0-amd64
    docker pull hyxxy/defaultbackend:1.4
    docker pull hyxxy/kubernetes-dashboard-amd64:v1.10.0
    docker tag hyxxy/kube-apiserver:v1.12.2 k8s.gcr.io/kube-apiserver:v1.12.2
    docker tag hyxxy/kube-controller-manager:v1.12.2 k8s.gcr.io/kube-controller-manager:v1.12.2
    docker tag hyxxy/kube-scheduler:v1.12.2 k8s.gcr.io/kube-scheduler:v1.12.2
    docker tag hyxxy/kube-proxy:v1.12.2 k8s.gcr.io/kube-proxy:v1.12.2
    docker tag hyxxy/pause:3.1 k8s.gcr.io/pause:3.1
    docker tag hyxxy/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
    docker tag hyxxy/coredns:1.2.2 k8s.gcr.io/coredns:1.2.2
    docker tag hyxxy/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
    docker tag hyxxy/defaultbackend:1.4 k8s.gcr.io/defaultbackend:1.4
    docker tag hyxxy/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
    

    配置

    # 配置转发相关参数,否则可能会出错
    $ cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    vm.swappiness=0
    EOF
    
    # 使配置生效
    $ sysctl --system
    
    # 如果net.bridge.bridge-nf-call-iptables报错,加载br_netfilter模块
    $ modprobe br_netfilter
    $ sysctl -p /etc/sysctl.d/k8s.conf
    # 加载ipvs相关内核模块
    # 如果重新开机,需要重新加载(可以写在 /etc/rc.local 中开机自动加载)
    $ modprobe ip_vs
    $ modprobe ip_vs_rr
    $ modprobe ip_vs_wrr
    $ modprobe ip_vs_sh
    $ modprobe nf_conntrack_ipv4
    # 查看是否加载成功
    $ lsmod | grep ip_vs
    

    2.2 初始化master节点

    直接使用命令:

    kubeadm init \
       --kubernetes-version=v1.12.2 \
       --pod-network-cidr=10.244.0.0/16 \
       --apiserver-advertise-address=10.1.44.147 \
       --ignore-preflight-errors=Swap
    

    初始化成功之后根据提示可以看到加入集群的命令,请保存好

    kubeadm join 10.1.44.147:6443 --token 8yuzkk.syj7fwf0lrc1kw65 --discovery-token-ca-cert-hash sha256:39122274dbb31b89dffb55be2f58e94abf07197d67b9bb734b7c11838fdd7cd7
    
    #修改端口限制
    vim /etc/kubernetes/manifests/kube-apiserver.yaml
    在--service-cluster-ip-range与insecure-port间添加如下node port配置
    ...
    - --service-cluster-ip-range=10.96.0.0/12
    - --service-node-port-range=0-32767
    - --insecure-port=0
    ....
    # 重启
    systemctl restart kubelet 
    
    # 如果初始化过程出现问题,使用如下命令重置:
    kubeadm reset
    rm -rf /var/lib/cni/ $HOME/.kube/config
    
    # 重置kubernetes服务,重置网络。删除网络配置,link(看情况是否重置,一般上两句命令即可)
    kubeadm reset
    systemctl stop kubelet
    systemctl stop docker
    rm -rf /var/lib/cni/
    rm -rf /var/lib/kubelet/*
    rm -rf /etc/cni/
    ifconfig cni0 down
    ifconfig flannel.1 down
    ifconfig docker0 down
    ip link delete cni0
    ip link delete flannel.1
    systemctl start docker
    

    下面的命令是配置常规用户如何使用kubectl访问集群(初始化成功后执行):

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    安装Pod Network

    创建 kube-flannel.yml
    然后执行

    kubectl apply -f  kube-flannel.yml
    

    master node参与工作负载

     kubectl describe node node1 | grep Taint
     kubectl taint nodes node1 node-role.kubernetes.io/master-
    

    安装 dashboard

    新建一个空目录:certs,然后执行下面命令:

    kubectl create secret generic kubernetes-dashboard-certs --from-file=certs -n kube-system
    

    进入certs目录 创建下面两个文件
    kubernetes-dashboard.yaml
    kubernetes-rbac.yaml
    安装启动

    # 读取当前目录配置文件进行安装启动(certs目录下)
    kubectl apply -f .
    

    开启代理访问

    nohup kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$' &
    

    若代理端口被占用,请查看 netstat -nap | grep 8001
    dashboard 访问地址
    http://10.1.44.147:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

    # 获取token
    kubectl -n kube-system get secret | grep kubernetes-dashboard-token
    xxxxxx
    kubectl describe -n kube-system secret/xxxxxx
    

    2.3 node节点加入集群(node节点操作)

    Node节点执行完 2.1后,并在mater执行完2.2后
    在node节点执行加入集群命令(mater初始化成功后保存的那条命令)

    kubeadm join 10.1.44.147:6443 --token 8yuzkk.syj7fwf0lrc1kw65 --discovery-token-ca-cert-hash sha256:39122274dbb31b89dffb55be2f58e94abf07197d67b9bb734b7c11838fdd7cd7
    

    加入成功之后可在master节点查看节点状态

    kubectl get nodes
    

    如果需要从集群中移除node2这个Node执行下面的命令
    在master节点上执行:

    kubectl drain node2 --delete-local-data --force --ignore-daemonsets
    kubectl delete node node2
    

    在node2上执行:

    kubeadm reset
    ifconfig cni0 down
    ip link delete cni0
    ifconfig flannel.1 down
    ip link delete flannel.1
    rm -rf /var/lib/cni/
    

    node节点重置同mater(注意重置完后也需启动)。


    Pod fannel 问题

    mkdir -p /etc/cni/net.d/
    
    cat <<EOF> /etc/cni/net.d/10-flannel.conf
    {"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}
    EOF
    mkdir /usr/share/oci-umount/oci-umount.d -p
    mkdir /run/flannel/
    
    cat <<EOF> /run/flannel/subnet.env
    FLANNEL_NETWORK=172.100.0.0/16
    FLANNEL_SUBNET=172.100.1.0/24
    FLANNEL_MTU=1450
    FLANNEL_IPMASQ=true
    EOF
    

    可参考
    https://blog.csdn.net/qq_34857250/article/details/82562514


    其他命令

    查看日志

    journalctl -f -u kubelet 
    

    查看node

    kubectl get nodes -n kube-system
    

    查看pod

    kubectl get pods -n kube-system
    

    删除pod

    kubectl delete pod tiller-deploy-6f6fd74b68-hmwzp -n kube-system
    

    相关文章

      网友评论

          本文标题:k8s v1.12.2部署与dashboard安装

          本文链接:https://www.haomeiwen.com/subject/lrzpcqtx.html