kubeadm方式部署K8S1.20版本

  1. 建议在安装K8S前,先去把K8S相关概念学习一下,不然可能会比较困惑。还有就是不要直接进行二进制部署,先用kubeadm方式,等对K8S熟悉后再尝试,要多去搜索资料,不要对着一个博客往死里搞,多多去参考其它文章,或者书籍,二进制部署部署内容较多,书写博客需要详细说明,大多数博客没有把细节说清,会让读者进很多坑,建议查看官方文档,或者比较权威的博主。
  2. 环境准备

    本次采用的是kubeadm的部署方式,可以快速部署一个K8S集群。另外,建议在理解了K8S的基础知识和熟悉后,搭建一套二进制版K8S集群进行深度理解。

    环境:宿主机windows10

    虚拟机:vmware,网络nat,最低2核,2G内存,25G磁盘

    建议分区:/20G, /var分3G以上,/boot分500m以上,理论上没有别的需求足够了,swap可以不要。

    服务器需要能够上网。

    软件环境:

    操作系统:centos7.6,建议最小化安装节省资源。

    容器引擎:docker ce 19

    Kubernetes:kubernetes v1.20

     

    服务器规划

    角色

    IP

    组件

    k8smaster

    192.168.222.15

    Docker,etcd,kubectl,kubelet,kubeadm

    node1

    192.168.222.16

    Docker,kubelet,kubeadm

    node2

    192.168.222.17

    Docker,kubelet,kubeadm

     

    注意:版本的选择注意要查看官方指引,高版本K8S,可能需要的docker版本会高点,linux内核可能会要求4以上。这个就需要自行去考查了。

     

     

     

     

  3. 系统初始化(所有主机都要做)

     

    关闭防火墙
    
    systemctl stop firewalld
    systemctl disable firewalld
    
     
    
    关闭selinux
    
    sed -i 's/enforcing/disabled/' /etc/selinux/config #会永久关闭
    
    setenforce 0 #临时关闭
    
     
    
    关闭swap
    
    swapoff -a # 临时
    sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
    
    设置主机名
    
    hostnamectl set-hostname <hostname>
    
     
    
    添加hosts
    
    cat >> /etc/hosts << EOF
    
    192.168.222.15 k8smaster
    
    192.168.222.16 k8snode1
    
    192.168.222.17 k8snode2
    
    EOF
    
     
    
    将桥接的IPV4流量传递到iptables链
    
    cat > /etc/sysctl.d/k8s.conf << EOF
    
    net.bridge.bridge-nf-call-iptables=1
    
    net.bridge.bridge-nf-call-ip6tables=1
    
    net.ipv4.ip_forward=1
    
    net.ipv4.tcp_tw_recycle=0
    
    vm.swappiness=0
    
    vm.overcommit_memory=1
    
    vm.panic_on_oom=0
    
    fs.inotify.max_user_instances=8192
    
    fs.inotify.max_user_watches=1048576
    
    fs.file-max=52706963
    
    fs.nr_open=52706963
    
    net.ipv6.conf.all.disable_ipv6=1
    
    net.netfilter.nf_conntrack_max=2310720
    
    EOF
    
    sysctl –system #生效
    
     
    
    #时间同步
    
    yum install ntpdate -y
    
    ntpdate time.windows.com
    

      

    #安装系统基础命令

     

    建议安装lrzsz,wget等需要用到的命令。这里自行去安装。

     

     

  4. 安装docker(所有机器安装)

    这里采用docker引擎,其它还有containerd等

    下载地址:https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz

    找个目录存放

    tar zxvf docker-19.03.9.tgz
    mv docker/* /usr/bin

    加入system管理

    cat > /usr/lib/systemd/system/docker.service << EOF
    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=network-online.target
    
    [Service]
    Type=notify
    ExecStart=/usr/bin/dockerd
    ExecReload=/bin/kill -s HUP $MAINPID
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    TimeoutStartSec=0
    Delegate=yes
    KillMode=process
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    
    [Install]
    WantedBy=multi-user.target
    EOF
     
    
    创建dockerjson配置文件
    
    mkdir /etc/docker
    cat > /etc/docker/daemon.json << EOF
    {
      "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
    }
    EOF
    

      

    此处的镜像地址为阿里云加速器,如果默认,那么可能需要访问国外网络拉去镜像,速度方面会比较差,有些镜像甚至无法访问拉取。

     

    设置开机启动

    systemctl daemon-reload
    systemctl start docker
    systemctl enable docker

     

     

  5. 配置阿里云YUM软件源:
     1 cat > /etc/yum.repos.d/kubernetes.repo << EOF
     2 
     3 [kubernetes]
     4 
     5 name=Kubernetes
     6 
     7 baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
     8 
     9 enabled=1
    10 
    11 gpgcheck=0
    12 
    13 repo_gpgcheck=0
    14 
    15 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    16 
    17 EOF
    18 
    19  
    20 
    21 #此处是K8S软件源

     

     

  6. 安装kubeadm,kubelet,kubectl(除了主节点都要安装,其余节点不安装kubectl)

    yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

    注意要指定版本,不然默认最新版本。

    systemctl enable kubelet

    注意:先不要启动,启动也会报错。需要等到初始化完成后在启动即可。

     

    kubeadm config print init-default >init.default.yaml

    生成初始化配置文件,然后可以改名或者不改。可以根据需求更改,然后进行初始化。

    或者可以直接使用初始化命令指定需求,直接进行初始化。

    其中一般更改选项如下图:192.168.222.15为master的IP,还有镜像地址,pod网段,版本,下载的啥版本填啥

     

     

    准备好初始化文件后开始初始化,

    kubeadm init –config=init-config.yaml

     

     

        如下图:出现successfully的话代表你初始化集群成功了。

    然后下面还有指引你把node节点加入集群的指引的token和哈希密钥

     

     

    拷贝kubectl使用的连接证书到默认路劲,同时把kubelet启动,systemctl start kubelet,查看状态是否正常。

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

     

  7. 把node节点加入集群

    根据初始化后的指引,在其余node节点执行

    kubeadm join 192.168.222.15:16443 --token 9037x2.tcaqnpaqkra9vsbw \
    --discovery-token-ca-cert-hash sha256:e6a724bb7ef8bb363762fbaa088f6eb5975e0c654db038560199a7063735a697

    默认的token只有24小时的有效期,如果是测试环境可以生成一个永久的。生产环境临时较为安全。

    注意:node节点上的docker和kubelet进程状态要查看是否正常,kubelet进程要等到初始化后,网络组件部署后会恢复。

  8. 部署网络组件calico

    目前主流的网络组件是calico,安装这个即可。注意这里来是要拉去镜像和创建pod,所以要等待一下我网络慢点等了十分钟左右,并去查看其pod处于什么状态,只有running状态才是正常。如果长时间处于某种状态,说明网络或者是配置出现问题,要去查看pod日志:kubectl logs -f <pod_name> -n namespace  namespace为名称空间,查看集群所有的namespace,kubectl get namespaces ,查看指定的namesapce下的pod

    # 获取 kube-system命名空间下所有pods信息
    kubectl get pods -n kube-system

  9. wget https://docs.projectcalico.org/manifests/calico.yaml 可能会显示不安全,可以按照指示加上参数,避免这个问题。这里下载好后,我测试1.20版本并不需要更改配置。
    
    kubectl apply -f calico.yaml
    kubectl get pods -n kube-system

    只有等到calico网络组件的pod都显示running,node的状态才会变成Ready。证明集群网络通畅了。

  10. 部署dashboard

    dashboard是官方提供的可视化web,可以管理集群资源。

    wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml

    kubectl apply -f kubernetes-dashboard.yaml
    # 查看部署
    kubectl get pods -n kubernetes-dashboard

    如果wget下载不了,可以输入网址在电脑上下载好,需要FQ。还有就是注意版本问题,一般2.0版本以上支持K8S1.20.

    指定NodePort方式暴露端口,指定为30001,可以为其它。输入以下命令。

    kubectl patch svc kubernetes-dashboard \

    -n kubernetes-dashboard \

    -p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30001}]}}'

     

    或者是在kubernetes-dashboard文件中直接配置。

    然后就可以在电脑上直接用https://NODE_IP:30001访问了。

    创建dashboard-adminuser.yaml

    cat > dashboard-adminuser.yaml << EOF
    
    apiVersion: v1
    
    kind: ServiceAccount
    
    metadata:
    
    name: admin-user
    
    namespace: kubernetes-dashboard
    
     
    
    ---
    
    apiVersion: rbac.authorization.k8s.io/v1
    
    kind: ClusterRoleBinding
    
    metadata:
    
    name: admin-user
    
    roleRef:
    
    apiGroup: rbac.authorization.k8s.io
    
    kind: ClusterRole
    
    name: cluster-admin
    
    subjects:
    
    - kind: ServiceAccount
    
    name: admin-user
    
    namespace: kubernetes-dashboard
    
    EOF

     

     

    创建用户

    kubectl apply -f dashboard-adminuser.yaml

    说明:上面创建了一个叫admin-user的服务账号,并放在kubernetes-dashboard 命名空间下,并将cluster-admin角色绑定到admin-user账户,这样admin-user账户就有了管理员的权限。默认情况下,kubeadm创建集群时已经创建了cluster-admin角色,我们直接绑定即可。

     

    查看admin-user账户的token

    kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

  11.  使用上面的token登录。

posted @ 2021-11-29 11:12  头发重要  阅读(517)  评论(0编辑  收藏  举报