zoukankan      html  css  js  c++  java
  • k8s(一) kubeadm简单集群初始化

    写给想入门kubernetes的同学们

    # 系统版本

    [root@master ~]# cat /etc/os-release 
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    

    #主机环境

    网络规划
    172.20.0.0/16   node通信网络
    master  172.20.0.2
    node1    172.20.0.3
    node2     172.20.0.4
    
    10.244.0.0/16   Pod 网络
    
    10.96.0.0/12    Service 网络
    #内核参数

    [root@master ~]# cat <<EOF >  /etc/sysctl.d/k8s.conf

    net.bridge.bridge-nf-call-ip6tables = 1

    net.bridge.bridge-nf-call-iptables = 1

    net.ipv4.ip_forward = 1

    EOF

    使配置生效

    [root@linux-node1 ~]# sysctl --system

      

    # 初始化操作

    安装 docker 和 kubeadm 在各个节点上(建议使用阿里云资源进行安装,不然会很卡)https://opsx.alibaba.com/mirror 

    # step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    # Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # Step 3: 更新并安装 Docker-CE
    sudo yum makecache fast
    sudo yum -y install docker-ce
    # Step 4: 开启Docker服务
    sudo service docker start
    
    
    # kubeadm
    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
    setenforce 0
    yum install -y kubelet kubeadm kubectl
    systemctl enable kubelet
    

    # 镜像拉去

    执行kubeadm init  进程会帮我们自动拉去这些进程并初始化master 集群。但是貌似这些镜像不太好拉去。

    我选择的方式是购买共有云的香港节点,安装docker 手动进行资源拉去 然后在打包 docker文件夹(/var/lib/docker),然后覆盖三台主机的docker主程序目录。

    [root@master ~]# docker images
    REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
    k8s.gcr.io/kube-apiserver            v1.13.3             fe242e556a99        3 weeks ago         181MB        
    k8s.gcr.io/kube-controller-manager   v1.13.3             0482f6400933        3 weeks ago         146MB
    k8s.gcr.io/kube-proxy                v1.13.3             98db19758ad4        3 weeks ago         80.3MB
    k8s.gcr.io/kube-scheduler            v1.13.3             3a6f709e97a0        3 weeks ago         79.6MB
    k8s.gcr.io/coredns                   1.2.6               f59dcacceff4        3 months ago        40MB
    k8s.gcr.io/etcd                      3.2.24              3cab8e1b9802        5 months ago        220MB
    k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        14 months ago       742kB

    # 执行 kubeadm init

       mkdir .kube 

       cp  /etc/kubernetes/admin.conf  .kube/config

    将node节点加入我们的master节点需要做两方面操作
    1 配置好hosts文件解析
    2 使用命令行加入k8s集群
    kubeadm join 172.20.0.91:6443 --token zibyeb.pmujgusravogr0k9 --discovery-token-ca-cert-hash sha256:f5f12fe4f58fbf698f33eb078c8b98b8491e2e2e996230926f
    
    一个是token 默认24小时失效 可通过 kubeadm token命令进行create
    一个是 根证书的 sha256 值
    通过以下命令获取
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    
    node节点会安装flannle  然后变成可用
    For Kubernetes v1.7+ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    #  最后状态

    [root@master ~]# kubectl get nodes  -o wide
    NAME        STATUS   ROLES    AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
    k8s-node1   Ready    <none>   5d6h   v1.13.3   172.20.0.3   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.2
    k8s-node2   Ready    <none>   5d6h   v1.13.3   172.20.0.4   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.2
    master      Ready    master   5d9h   v1.13.3   172.20.0.2   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://18.9.2
    

    #   kubectl  命令行自动补全

    source < $(kubectl completion bash )
    kubectl completion bash > ~/.kube/completion.bash.inc
    

    #  搞定了 开始你的  k8s 之路吧。

    kubeadm 帮你做了什么

    [init]:指定版本进行初始化操作
    
    [preflight] :初始化前的检查和下载所需要的Docker镜像文件
    
    [kubelet-start] :生成kubelet的配置文件”/var/lib/kubelet/config.yaml”,没有这个文件kubelet无法启动,所以初始化之前的kubelet实际上启动失败。
    
    [certificates]:生成Kubernetes使用的证书,存放在/etc/kubernetes/pki目录中。
    
    [kubeconfig] :生成 KubeConfig 文件,存放在/etc/kubernetes目录中,组件之间通信需要使用对应文件。
    
    [control-plane]:使用/etc/kubernetes/manifest目录下的YAML文件,安装 Master 组件。
    
    [etcd]:使用/etc/kubernetes/manifest/etcd.yaml安装Etcd服务。
    
    [wait-control-plane]:等待control-plan部署的Master组件启动。
    
    [apiclient]:检查Master组件服务状态。
    
    [uploadconfig]:更新配置
    
    [kubelet]:使用configMap配置kubelet。
    
    [patchnode]:更新CNI信息到Node上,通过注释的方式记录。
    
    [mark-control-plane]:为当前节点打标签,打了角色Master,和不可调度标签,这样默认就不会使用Master节点来运行Pod。
    
    [bootstrap-token]:生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到
    
    [addons]:安装附加组件CoreDNS和kube-proxy
    

      

  • 相关阅读:
    [转载] 淘宝千万级并发分布式架构的14次演进
    [转载] 分布式锁用Redis还是Zookeeper?
    .Net面试题收集
    List,set,Map 的用法和区别
    android 布局中 layout_gravity、gravity、orientation、layout_weight
    Android getWindow().setFlags方法
    android动画之Interpolator和AnimationSet
    Android中Animation详解
    android ImageView scaleType属性
    tools:context=".MainActivity的作用
  • 原文地址:https://www.cnblogs.com/leleyao/p/10427817.html
Copyright © 2011-2022 走看看