zoukankan      html  css  js  c++  java
  • k8s集群搭建

    k8s集群搭建

     

    k8s简介

    kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制

    k8s的资源对象

    master

    kubernetes里的master指的是集群控制节点,在每个kubernetes集群里都需要有一个master来负责真个集群的管理和控制,在master上运行着以下关键进程:

    • API Server(kube-apiserver):提供了HTTP Rest接口的关键服务进程,是kubernetes里所有资源的增删改查等操作的唯一入口,也是集群中的入口进程
    • Controller Manager(kube-controller-manager):kubernetes里所有资源对象的自动化控制中心,可以理解成为资源对象的“大总管”
    • Scheduler:(kube-scheduler):负责资源调度(pod调度)的进程,相当于公交公司的“调度室”
    • Etcd:所有资源对象的数据被会被保存到etcd中,持久化

    node

    除了master,kubernetes集群中其他机器被称之为 Node,node可以是一台物理机,也可以是一台虚拟机,node是kubernetes集群中的工作负载节点,每个node都会被master分配一些工作负载(docker容器),当某个node宕机时,其他节点会接管故障节点的资源,node节点当中的重要进程:

    • kubelet:负责pod对应容器的创建,启停等任务,另外kubelet与master紧密协作,随时报告给master自身的情况,如CPU,内存,操作系统,docker版本等
    • kube-proxy:实现kubernetes server的通信与负载均衡机制的重要组件
    • docker engine:docker引擎,负责本主机的容器创建 和管理工作

    pod

    pod是kubernetes最重要的基本概念,是kubernetes调度的最小单元,每个container都有一个pause容器,称之为根容器,属于kubernetes平台的一部分,一个pod可以运行多个容器(container),但是一般来说我们一个pod只运行一个container,如下图:

    k8s集群架构图

    集群的搭建(master)

    简单了解k8s的资源对象之后咱们就先来搭建一个k8s集群,因为我们的后续操作都是建立在k8s集群当中的,因此,我们就需要先搭建一个k8s集群,这样也便于大家的理解

    环境准备

    三台机器:

    • master:192.168.254.13
    • node1:192.168.254.12
    • node2:192.168.254.10
    • 基于主机名通信:/etc/hosts;
    • 时间同步
    • 关闭firewalld,selinux 

    第一步:确保master和node中开启内核参数

    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
      note:如果提示没有bridge-nf-call-iptables
        解决办法:
           [root@localhost ~]# modprobe br_netfilter 

    第二步:配置docker  yum源和kubenetes  yum源并且安装

    复制代码
    #安装kubernetes的yum源
    vim /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 gpgkey = https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg #安装docker的yum源 cd /etc/yum.repos.d/ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install kubelet kubeadm kubectl docker-ce -y
    复制代码

    第三步:添加初始化额外参数,忽略swap报警信息

    [root@localhost ~]# vim /etc/sysconfig/kubelet 
        KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    [root@localhost ~]# service docker restart

    第四步:初始化集群

    复制代码
    [root@localhost ~]# kubeadm init --kubernetes-version=v1.15.2 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU --image-repository registry.aliyuncs.com/google_containers
                    解释:
                        --apiserver-advertise-address:指定用 Master 的哪个IP地址与 Cluster的其他节点通信。
                        --service-cidr:指定Service网络的范围,即负载均衡VIP使用的IP地址段。
                        --pod-network-cidr:指定Pod网络的范围,即Pod的IP地址段。
                        --image-repository:Kubenetes默认Registries地址是 k8s.gcr.io,在国内并不能访问 gcr.io,在1.13版本中我们可以增加-image-repository参数,默认值是 k8s.gcr.io,将其指定为阿里云镜像地址:registry.aliyuncs.com/google_containers。
                        --kubernetes-version=v1.13.3:指定要安装的版本号。
                        --ignore-preflight-errors=:忽略运行时的错误,例如上面目前存在[ERROR NumCPU]和[ERROR Swap],忽略这两个报错就是增加--ignore-preflight-errors=NumCPU 和--ignore-preflight-errors=Swap的配置即可。
    复制代码

    第五步:记录以下内容,因为后期我们的node节点需要通过ca认证加入到集群当中

    kubeadm join 192.168.254.13:6443 --token 71ovlq.w7pf14czrwi7f1ag --discovery-token-ca-cert-hash sha256:d2a9a1aa23fdbcd42711a222c959026073cf0a70f37a87806233d8319c66feb4 

    第六步:按照提示完成以下三步

    [root@localhost ~]# mkdir -p $HOME/.kube
    [root@localhost ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@localhost ~]# chown $(id -u):$(id -g) $HOME/.kube/config 

    第七步:查看节点状态

    这里的NotReady是因为咱们还没有部署网络

    [root@localhost ~]# kubectl get node
    NAME                    STATUS     ROLES    AGE   VERSION
    localhost.localdomain   NotReady   master   8h    v1.15.2

    第八步:查看组件状态

    [root@localhost ~]# kubectl get cs
     NAME                 STATUS    MESSAGE             ERROR
     controller-manager   Healthy   ok                  
     scheduler            Healthy   ok                  
     etcd-0               Healthy   {"health":"true"}

    第九步:部署flannel网络(github)

    复制代码
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    若下载失败可以从阿里云上pull
        [root@master1 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64
        [root@master1 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
        [root@master1 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/rsq_kubeadm/flannel:v0.11.0-amd64
    复制代码

     集群的搭建(2个node节点)

    对于2个node节点的配置跟master节点的1,2,3步一样,这里就不在写了,直接跳到第四步

    第四步:节点加入集群,也就是部署master时候的第五步

    [root@localhost ~]#kubeadm join 192.168.254.13:6443 --token wug9gq.m9j7hhmvvy9ag8kk --discovery-token-ca-cert-hash sha256:6f8a056391bf04c3911465c581e78376e1d35eb309641105ddd69ce5eb47c591 --ignore-preflight-errors=Swap

    第五步:在master节点上用一下命令查看,以下状态是代表ok

    [root@master ~]# kubectl get nodes
    NAME     STATUS   ROLES    AGE   VERSION
    master   Ready    master   10h   v1.15.3
    node1    Ready    <none>   10h   v1.15.3
    node2    Ready    <none>   10h   v1.15.3

    补充

    复制代码
    1.如果发现以上错误说明master节点token失效,需要在master上重新生成
    [root@localhost ~]# kubeadm token create --print-join-command
    
    3.如果node机器曾经加入过集群,要重新加入需要kubeadm reset重置,然后在join
    [root@localhost ~]# kubeadm reset
    
    4.如果忘掉token
    [root@master ~]# kubeadm token list
    5.如果忘掉hash串 [root@master]openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
  • 相关阅读:
    【Leetcode】【Easy】Remove Duplicates from Sorted List
    【Leetcode】【Easy】Pascal's Triangle II
    【Leetcode】【Easy】Pascal's Triangle
    【Leetcode】【Easy】Binary Tree Level Order Traversal II
    【Leetcode】【Easy】Binary Tree Level Order Traversal
    【Leetcode】【Easy】Maximum Depth of Binary Tree
    【Leetcode】【Easy】Minimum Depth of Binary Tree
    【Leetcode】【Easy】Balanced Binary Tree
    【Leetcode】【Easy】Symmetric Tree
    如何使用Action.Invoke()触发一个Storyboard
  • 原文地址:https://www.cnblogs.com/it-peng/p/11584470.html
Copyright © 2011-2022 走看看