zoukankan      html  css  js  c++  java
  • k8s安装记录

    一、准备工作

    --------------------------------------【准备工作】-------------------------------------------------
    1.配置虚拟机网络


    2.镜像源配置

    mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum makecache
    yum -y update
    

    3.关闭防火墙

    systemctl stop firewalld & systemctl disable firewalld
    

    4.关闭selinux

    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
    

    5.关闭swap

    swapoff -a
    sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
    #查看swap是否被注释掉
    cat /etc/fstab  
    # 用top查看swap情况,会看到swap的使用为0
    
    #刷新swap使之生效
    sysctl -p
    

    6.设置路由

    yum install -y bridge-utils.x86_64
    modprobe  br_netfilter  # 加载br_netfilter模块,使用lsmod查看开启的模块
    
    cat <<EOF >  /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    sysctl --system  # 重新加载所有配置文件
    

    7.修改主机名,其他节点类似,可设为master,node1,node2

    hostnamectl set-hostname centos-master
    
    cat <<EOF >>/etc/hosts
    192.168.214.128 centos-master
    EOF
    

    二、docker-ce 安装

    ------------------------------------【docker安装】-------------------------------------------------
    1.配置docker镜像源

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum makecache
    

    2.安装合适的docker版本

    # 查看docker-ce版本
    yum list docker-ce --showduplicates | sort -r
    #停止并删除已有的docker
    systemctl stop docker && systemctl disable docker
    yum remove docker-ce docker-ce-cli
    

    3.安装指定版本的docker-ce,建议安装18.09

    yum -y install docker-ce-18.09.9
    

    4.启动docker服务并激活开机启动

    systemctl start docker & systemctl enable docker
    

    5.配置docker镜像源:

    touch /etc/docker/daemon.json
    vim /etc/docker/daemon.json
    {
        "registry-mirrors": ["https://r0p1k0cb.mirror.aliyuncs.com"]
    }
    systemctl daemon-reload
    systemctl restart docker
    

    6.运行第一个docker容器

    docker run hello-world
    
    # 查看docker版本
    docker version
    

    7.貌似会把上面的配置冲掉,可不做!

    修改docker cgroup驱动,与k8s一致,使用systemd
    cat > /etc/docker/daemon.json <<EOF
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2",
      "storage-opts": [
        "overlay2.override_kernel_check=true"
      ]
    }
    EOF
    
    systemctl restart docker  # 重启使配置生效
    

    三、k8s安装

    ------------------------------------【k8s安装】-----------------------------------------------------------------
    1.配置k8s yum源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
           http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    

    2.在master节点安装kubelet kubeadm kubectl,其他节点也需要

    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    

    3.开机启动kubelet

    systemctl enable --now kubelet
    

    四、k8s初始化开始

    ------------------------------------【k8s初始化】----------------------------------------------------------------
    开始前,建议,先做一个快照,便于随时恢复!!!

    1. 在master进行k8s集群初始化 (注意:Centos最低要求,2核2G,否则初始化失败。)
    //定义POD的网段为:10.244.0.0/16,注意:这里指定网段后,需要在kube-flannel.yml 文件中保持一致。api server地址就是master本机IP地址
    kubeadm init --kubernetes-version=1.17.3 --apiserver-advertise-address=192.168.214.128 --image-repository registry.aliyuncs.com/google_containers --service-cidr=192.1.0.0/16 --pod-network-cidr=10.244.0.0/16
    

    //成功结果如下:

    Your Kubernetes control-plane has initialized successfully!
    
    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    

    【注意】: 记录生成的最后部分内容,此内容需要在后面会用到,其它节点加入k8s集群时执行。

    kubeadm join 192.168.214.128:6443 --token wuhe1t.2prgpopmvd7eqdsx 
        --discovery-token-ca-cert-hash sha256:26ab9402953c65f7de57543e7dc7590a1ab1847ce13774e4e4f5ea4eed242093
    

    1.1 执行以下命令

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

    说明:如果kubeadm init失败,想重新init,可以重置:

    kubeadm reset
    rm -rf $HOME/.kube  //需要手动删除文件夹
    

    2.在master节点部署flannel网络
    方法一:(网络通畅的情况下运行)

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    // 如果上述命令由于网络无法连接失败,可尝试:

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

    注意:需要修改该文件,若要修改网段,需要kubeadm –pod-network-cidr=和这里同步,修改network项。

    vim kube-flannel.yml
    
    net-conf.json: |
     64     {
     65       "Network": "10.244.0.0/16",  # 注意:这里的配置,要和kubeadm init中指定的一致!!!
     66       "Backend": {
     67         "Type": "vxlan"
     68       }
     69     }
    

    输入ip route show验证,是否显示10.244.0.0/16,如果失败,docker images请查看镜像是否完整。是否有flannel相关的镜像,版本是否正确。
    可手动执行:
    docker pull quay.io/coreos/flannel:v0.11.0-amd64
    docker images //查看

    注意: 如果失败unchanged,则使用生产不能运行这一步,所有的pod都会运行不了,失去通信

    kubectl delete -f kube-flannel.yml
    kubectl apply -f kube-flannel.yml
    

    3.将master节点作为工作节点,k8s集群默认不会将Pod调度到master上

    kubectl taint nodes --all node-role.kubernetes.io/master-
    

    4.加入node节点,在centos-node1节点执行上面步骤中保存的k8s join命令,这个命令在kubeadm init时生成。如果忘记,可以执行kubeadm token list 查看。

    kubeadm join 192.168.214.128:6443 --token pxu31z.6yjf0vih086oe4lr 
        --discovery-token-ca-cert-hash sha256:a5a5def277ae5f1a07e77ceb99978fa0c2a7dc67b150121117cfb9e9de533ef2
    

    //如果token过期,可以重新生成token:

    # kubeadm token create
    424mp7.nkxx07p940mkl2nd
    # openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    d88fb55cb1bd659023b11e61052b39bbfe99842b0636574a16c76df186fd5e0d
    
    kubeadm join 192.168.214.128:6443 –-token pxu31z.6yjf0vih086oe4lr --discovery-token-ca-cert-hash sha256:a5a5def277ae5f1a07e77ceb99978fa0c2a7dc67b150121117cfb9e9de533ef2
    

    说明:如果想删除节点,可执行

    kubectl get node
    kubectl delete node centos-node-02
    

    5.验证集群是否正常
    //若提示notReady则表示节点尚未准备好,可能正在执行其他初始化操作,等待全部变为Ready即可

    kubectl get nodes 
    

    6.建议查看所有pod状态,运行:

    kubectl get pods -n kube-system    // 全部Running则表示集群正常
    

    【排错】:

    查看pod状态
    kubectl get pod --all-namespaces
    
    查看Pod具体情况
    kubectl describe pod kube-flannel-ds-amd64-969xq --namespace=kube-system
    
    排错日志:
    journalctl -f  # 当前输出日志
    journalctl -f -u kubelet  # 只看当前的kubelet进程日志
    

    7.查看所有pods

    	kubectl get pods -n kube-system
    

    8.kubelet 启动状态

    systemctl status kubelet
    systemctl restart docker && systemctl restart kubelet
    

    9.移除节点

    kubectl get node
    kubectl delete node centos-node-02
    

    10.重置

    kubeadm reset
    rm -rf $HOME/.kube  //需要手动删除文件夹
    

    11.查看pod状态

    kubectl get pod --all-namespaces
    

    12.查看Pod具体情况

    kubectl describe pod kube-flannel-ds-amd64-969xq --namespace=kube-system
    

    13.dashboard安装

    a.下载文件
    wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
    b.修改文件
    158   type: NodePort
    159   ports:
    160     - port: 443
    161       targetPort: 8443
    162       nodePort: 30001
    
    
    c.//dashboard-rbac.yaml文件,可自建,内容如下:
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dashboard
      namespace: kube-system
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: dashboard
    subjects:
      - kind: ServiceAccount
        name: dashboard
        namespace: kube-system
    roleRef:
      kind: ClusterRole
      name: cluster-admin
      apiGroup: rbac.authorization.k8s.io
    
    d.执行如下命令
    sudo kubectl apply -f kubernetes-dashboard.yaml
    sudo kubectl apply -f dashboard-rbac.yaml 
    
    e.详情:
    https://juejin.im/post/5d089f49f265da1baa1e7611#heading-23 
    
    f.获取token
    kubectl -n kube-system describe $(kubectl -n kube-system 
    get secret -n kube-system -o name | grep namespace) | grep token
    
    g.谷歌浏览器登录
    mkdir key && cd key
    #生成证书
    openssl genrsa -out dashboard.key 2048 
    openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.246.200'
    openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt 
    #删除原有的证书secret
    kubectl delete secret kubernetes-dashboard-certs -n kube-system
    #创建新的证书secret
    kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kube-system
    #查看pod
    kubectl get pod -n kube-system
    #重启pod
    kubectl delete pod <pod name> -n kube-system
    
    --------------------------------------------------------------------------------------------------------
    
    ## 下载镜像需要一定时间,看pod处于running表示安装成功
    kubectl get pod -n kube-system |grep kubernetes-dashboard
    如果没有运行,使用kubectl describe pod kubernetes-dashboard-f65fc699b-62wn8 --namespace=kube-system ,查看具体失败原因,很大一部分原因是拉去镜像失败,可手动拉取docker pull xxx:xx,具体镜像名称,可在该文件中查看,kubernetes-dashboard.yaml,可以修改替换镜像地址。
    
    例如,我改了以下内容:
    109     spec:
    110       containers:
    111       - name: kubernetes-dashboard
    112         image: siriuszg/kubernetes-dashboard-amd64:v1.10.1   //原有的镜像,手动无法下载
    
    

    --------------------------------------【其他问题记录】--------------------------------------------------

    四、其他问题

    k8s部署失败的常见原因:
    http://dockone.io/article/2247
    
    k8s其他安装方法:
    离线安装:https://www.jianshu.com/p/ae9f20b42064?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin&from=singlemessagehttps://www.jianshu.com/p/ae9f20b42064?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin&from=singlemessage
    
    Rancher https://rancher.com/
    自动化部署集群 https://github.com/gjmzj/kubeasz
    
    配置Calico网络:
    https://mp.weixin.qq.com/s/WsY9z56Xtc4p7L5oM1tkuw
    
    dockerhub地址:
    https://hub.docker.com/   //查找相应的镜像
    

    docker images 结果如下:

    五、相关链接

    https://juejin.im/post/5d60d11051882513cb48ff20
    https://zhuanlan.zhihu.com/p/96084545
    https://juejin.im/post/5d60d11051882513cb48ff20
    https://segmentfault.com/a/1190000013903445#item-1-14

  • 相关阅读:
    Linux下安装nginx
    使用Nginx搭建集群
    怎样解决虚拟机中多台机器之间的相互通信问题??
    怎样安装vmtools
    常用的机器学习&数据挖掘知识(点)领域链接
    sparkan安装链接
    matlab中怎样将散点用光滑曲线连接起来??
    matlab中怎样画出散点图,将这些散点连接成线??
    matlab中怎样计算两个集合的差集?-setdiff函数
    MATLAB中在一个三维矩阵中如何提取出一个二维矩阵,使用permute
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/12504392.html
Copyright © 2011-2022 走看看