zoukankan      html  css  js  c++  java
  • k8s学习笔记之二:使用kubeadm安装k8s集群

    一、集群环境信息及安装前准备

    部署前操作(集群内所有主机):

    1.关闭防火墙,关闭selinux(生产环境按需关闭或打开)
    2.同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器
    3.关闭swap分区  
    4.集群所有节点主机可以相互解析
    5.master对node节点ssh互信
    6.配置系统内核参数使流过网桥的流量也进入iptables/netfilter框架(如果报错,提示没有文件  modprobe br_netfilter 添加此模块)
    echo -e 'net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf && sysctl -p

    #kubeadm预检需求见此链接https://github.com/kubernetes/kubeadm/tree/master/docs/design

    二、配置yum源及k8s相关软件包下载(所有节点相同操作)

    1.配置yum、epel、k8s及docker源

    [root@k8s-master ~]# cd /etc/yum.repos.d
    [root@k8s-master yum.repos.d]# yum install wget -y
    [root@k8s-master yum.repos.d]# rm -f CentOS-*
    [root@k8s-master yum.repos.d]#wget -O /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo  
    [root@k8s-master yum.repos.d]#wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo 
    [root@k8s-master yum.repos.d]#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
    [root@k8s-master yum.repos.d]#wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    [root@k8s-master yum.repos.d]#rpm -import rpm-package-key.gpg  #安装key文件
    [root@k8s-master yum.repos.d]#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    [root@k8s-master yum.repos.d]#yum clean all  && yum makecache fast

    2.安装kubeadm和相关工具包

    [root@k8s-master ~]# cd
    [root@k8s-master ~]# yum install docker  kubectl-1.10.0 kubeadm-1.10.0      kubelet-1.10.0 kubernetes-cni-0.6.0  -y  #需要制定版本,默认是最新的,由于不可描述的原因,暂时最新的还无法下载

    3.由于有些不可描述的原因,我们无法去Google直接下载相关镜像,所以配置使用阿里云上的镜像,为了提高下载速度,需要配置阿里云的加速器

     登录 https://cr.console.aliyun.com/ 阿里云(如果没有请先注册)

     

    点击镜像加速器,并根据操作系统选择对应的操作文档即可

    启动相关服务并设置开机自启

    [root@k8s-master ~]# systemctl daemon-reload 
    [root@k8s-master ~]# systemctl enable docker && systemctl restart docker
    [root@k8s-master ~]# systemctl enable kubelet && systemctl restart kubelet

    4.下载K8S相关镜像

    [root@k8s-master ~]# cat down_k8s.sh 
    #!/bin/bash
    images=(kube-proxy-amd64:v1.10.0 kube-scheduler-amd64:v1.10.0 kube-controller-manager-amd64:v1.10.0 kube-apiserver-amd64:v1.10.0
    etcd-amd64:3.1.12 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8
    k8s-dns-dnsmasq-nanny-amd64:1.14.8)
    for imageName in ${images[@]} ; do
      docker pull keveon/$imageName
      docker tag keveon/$imageName k8s.gcr.io/$imageName
      docker rmi keveon/$imageName
    done
    [root@k8s-master ~]# sh down_k8s.sh

     1.12版本下载脚本:

    #!/bin/bash
    down_image_url=registry.cn-hangzhou.aliyuncs.com/kuberimages/
    images=(kube-proxy:v1.12.3 kube-apiserver:v1.12.3 kube-controller-manager:v1.12.3 kube-scheduler:v1.12.3 etcd:3.2.24 coredns:1.2.2 flannel:v0.10.0-amd64 pause:3.1 kubernetes-dashboard-amd64:v1.10.0)
    for imageName in ${images[@]} ; do
      docker pull ${down_image_url}$imageName
      docker tag  ${down_image_url}$imageName k8s.gcr.io/$imageName
      docker rmi  ${down_image_url}$imageName
    done

    由于1.13版本已经支持指定镜像仓库,所以我们可以指定到阿里的镜像仓库,这样不可以科学**上网也可以直接安装了

    kubeadm init     --apiserver-advertise-address=192.168.199.116     --image-repository registry.aliyuncs.com/google_containers     --kubernetes-version v1.13.1     --pod-network-cidr=10.244.0.0/16

    查看镜像是否下载

    [root@k8s-master ~]# docker images
    REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
    k8s.gcr.io/kube-proxy-amd64                v1.10.0             bfc21aadc7d3        7 months ago        97 MB
    k8s.gcr.io/kube-apiserver-amd64            v1.10.0             af20925d51a3        7 months ago        225 MB
    k8s.gcr.io/kube-scheduler-amd64            v1.10.0             704ba848e69a        7 months ago        50.4 MB
    k8s.gcr.io/kube-controller-manager-amd64   v1.10.0             ad86dbed1555        7 months ago        148 MB
    k8s.gcr.io/etcd-amd64                      3.1.12              52920ad46f5b        7 months ago        193 MB
    k8s.gcr.io/kubernetes-dashboard-amd64      v1.8.3              0c60bcf89900        8 months ago        102 MB
    quay.io/coreos/flannel                     v0.10.0-amd64       f0fad859c909        9 months ago        44.6 MB
    k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64     1.14.8              c2ce1ffb51ed        9 months ago        41 MB
    k8s.gcr.io/k8s-dns-sidecar-amd64           1.14.8              6f7f2dc7fab5        9 months ago        42.2 MB
    k8s.gcr.io/k8s-dns-kube-dns-amd64          1.14.8              80cc5ea4b547        9 months ago        50.5 MB
    k8s.gcr.io/pause-amd64                     3.1                 da86e6ba6ca1        10 months ago       742 kB

    三、初始化k8s集群(仅master节点)

    [root@k8s-master ~]# kubeadm init --kubernetes-version=v1.10.0 --pod-network-cidr=10.244.0.0/16  #指定版本,需要与docker中的镜像版本一致

    看到 "initialized successfully!"字样表示初始化完成,并且提示如果是普通用户如何使用集群,并且提示其他节点如何加入集群的方法

    配置环境变量

    [root@k8s-master ~]# mkdir -p $HOME/.kube
    [root@k8s-master ~]#  cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    或者:
    [root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

    查看集群状态:

    [root@k8s-master ~]# kubectl get nodes
    NAME         STATUS     ROLES     AGE       VERSION
    k8s-master   NotReady   master    10m       v1.10.0

    可以看到STATUS显示未就绪,这是因为现在还没有网络可用,下一步我们需要配置网络功能

     四、安装网络插件(master节点)

    由于网络功能是作为插件存在的,k8s本身并不提供网络功能,所有我们需要自行安装,这里我们选择flannel

    flannel项目地址:https://github.com/coreos/flannel,根据项目的部署手册进行如下操作

    [root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel
    或者:
    [root@k8s-master ~]# wget  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    [root@k8s-master ~]# kubectl apply -f kube-flannel.yml  

    flannel支持的模式:

    flannel支持多种模型
         VxLAN  #vxLAN有以下两种模式
              (1) vxlan  #叠加网络或者隧道网络,通过封装网络报文的方式使不同网段的pod之间可以通讯
              (2) Directrouting #直接使用主机的IP地作为网关,通过主机路由的方式与目标pod进行通讯,当目标pod与当前pod不在同一三层网络内,会自动降级为VxLAN模式
        host-gw: Host GateWay #与VxLAN的Directrouting模式相同,当目标pod与当前pod不在同一三层网络内时,pod之间无法通讯
        UDP: #早期由于Linux内核不支持VxLAN,host-gw又有非常高的入门门槛,udp是flannel最早期使用的模式,由于使用普通的udp报文通讯,性能非常差,在可以使用前面两种模式的情况下请勿使用该模式 

    #默认flannel的模式为vxlan,可以修改为性能更好的directrouting模式,修改见下图

    安装完成后,稍等一下再查看集群状态,发现已经就绪了(master上)

    [root@k8s-master ~]# kubectl get nodes
    NAME         STATUS    ROLES     AGE       VERSION
    k8s-master   Ready     master    1h        v1.10.0

    五、node节点加入集群(所有node上)

    [root@k8s-node1 ~]#  kubeadm join 192.168.199.116:6443 --token fauq6n.e1iv2mbxotq5a1zp --discovery-token-ca-cert-hash sha81dbbeb6

    见到以上提示,证明节点加入成功,并提示在master节点上如何查看节点

    在master查看节点加入

    从图中可以看到,节点最开始加入后状态为未就绪,稍等后就会变成就绪状态,这是因为节点加入后需要创建相关的pod,需要一些时间

    至此就完成了K8S三节点集群的安装部署。

  • 相关阅读:
    ASCII对应码表-键值(完整版)
    node.js中使用路由方法
    关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能;可能和其他插件有冲突)
    js中 !==和 !=的区别是什么
    spring 请求参数和路径变量
    PowerShell因为在此系统中禁止执行脚本解决方法
    SQL server 2008数据库的备份与还原(亲测,效果良好)注意采用单用户模式呀
    webpack-dev-server提示css模块解析失败,但已经装了css-loader
    webpack集成vue单文件模式的很多坑(研究了1个星期)
    npm全局模块卸载及默认安装目录修改方法
  • 原文地址:https://www.cnblogs.com/panwenbin-logs/p/9866109.html
Copyright © 2011-2022 走看看