zoukankan      html  css  js  c++  java
  • ubuntu-k8s搭建

    系统环境

    服务器联网

    Kubernetes version: v1.21.0

    Ubuntu 20.04.1 LTS

    部署计划

    192.168.137.2 k8s-master
    192.168.137.3 k8s-node1

    安装准备(master/node)

    关闭防火墙

    #关闭防火墙
    ufw disable
    #查看状态
    ufw status

    禁止swap分区

    #临时
    swapoff -a
    #持久化修改/etc/fstab,注释掉swap那行

     设置正确的时区

    #修改为上海
    timedatectl set-timezone Asia/Shanghai
    #更改时区系统日志生效
    systemctl restart rsyslog 

    设置host

    如果有selinux要设置关闭

    #编辑hosts添加以下内容
    vi /etc/hosts

    #k8s
    192.168.137.2 k8s-master 192.168.137.3 k8s-node1

    修改主机名

    master节点修改

    #临时生效
    hostname  k8s-master 
    #重启后永久生效
    hostnamectl set-hostname k8s-master
    #查看当前主机名
    hostname

    node节点修改

    #临时生效
    hostname  k8s-node1
    #重启后永久生效
    hostnamectl set-hostname k8s-node1
    #查看当前主机名
    hostname

    网络设置

    因为Gemfield的K8s集群即将部署的是calico网络插件,而calico需要这个内核参数是0或者1,但是Ubuntu20.04上默认是2这里还需要修改/etc/sysctl.d/10-network-security.conf中的rp_filter值为1

    #创建桥接配置k8s.conf
    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    #设置rp_filter的值
    vi /etc/sysctl.d/10-network-security.conf

      #将下面两个参数的值从2修改为1
      #net.ipv4.conf.default.rp_filter=1
      #net.ipv4.conf.all.rp_filter=1

    #手动加载所有的配置文件
    sysctl --system

    安装docker

    没装就装,装了跳过,此处省略安装过程

    master安装

     安装必要的软件

    sudo apt-get update 
    
    sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl

    添加debian密钥

    wget https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
    apt-key add apt-key.gpg

    添加源

    sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF 
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    apt-get update

    安装

    apt-get install -y kubelet kubeadm kubectl
    
    apt-mark hold kubelet kubeadm kubectl

    安装成功后设置docker开机启动否则执行下面命令会被警告

    systemctl enable docker.service

    init 方案一
    这是获取镜像的一种方法但是由于版本不同国内镜像源可能有各种问题 所以可以使用方案二

    kubeadm init --pod-network-cidr 172.16.0.0/16 --image-repository=cn-hangzhou.aliyuncs.com/google_containers

    init 方案二 先使用下面的脚本来获取镜像或者单独处理
    使用前根据安装版本更改images变量
    获取需要镜像命令

    kubeadm config images list

    获取国内源的镜像然后改images,以下是脚本示例是v1.21.0版本

    #!/bin/bash
    # download k8s 1.21.0 images
    # get image-list by 'kubeadm config images list --kubernetes-version=v1.21.0'
    # registry.cn-hangzhou.aliyuncs.com/google_containers/google-containers == k8s.gcr.io
    
    images=(
    kube-apiserver:v1.21.0
    kube-controller-manager:v1.21.0
    kube-scheduler:v1.21.0
    kube-proxy:v1.21.0
    pause:3.4.1
    etcd:3.4.13-0
    coredns:v1.8.0
    )
    
    for imageName in ${images[@]};do
        docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName  
        docker tag  registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName  
        docker rmi  registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    done

    如果这里有部分镜像失败就取docker hub找 手动pull然后安规则改名
    再执行

    kubeadm init --pod-network-cidr 172.16.0.0/16

    参数说明
    --pod-network-cidr 172.16.0.0/16 设置无类型域间选路 指明 pod 网络可以使用的 IP 地址段
    --image-repository=cn-hangzhou.aliyuncs.com/google_containers 选择用于拉取控制平面镜像的容器仓库(默认值是"k8s.gcr.io" 没有**上网应该拉不到)

     

    这里可能会有的报错和警告

    [init] Using Kubernetes version: v1.16.0
    [preflight] Running pre-flight checks
    [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
    error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR NumCPU]: the number of available CPUs 1 is less than the required 2

    错误:Kubernetes对GPU要求至少是2核,2G内存

    因为这里系统在虚拟机上运行,因为虚拟机默认了一核,可以通过配置,调整成2核,重启系统即可

    警告:检测到“cgroupfs”作为Docker cgroup驱动程序。 推荐的驱动程序是“systemd”。

    更换驱动

    vim /etc/docker/daemon.json
    #在json最外层对象添加属性

      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
      "max-size": "100m"
      },
      "storage-driver": "overlay2",
      "storage-opts": [
      "overlay2.override_kernel_check=true"
      ]

     获取不到镜像

    [init] Using Kubernetes version: v1.21.0
    [preflight] Running pre-flight checks
    [preflight] Pulling images required for setting up a Kubernetes cluster
    [preflight] This might take a minute or two, depending on the speed of your internet connection
    [preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
    error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.21.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    , error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.21.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    , error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.21.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    , error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.21.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    , error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.4.1: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    , error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.13-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    , error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns/coredns:v1.8.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
    , error: exit status 1
    [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

    检查所需要的镜像是否有少

    init命令执行成功后,会输出一条和kubeadm join相关的命令,后面加入worker node的时候要使用。
    另外,给自己的非sudo的常规身份拷贝一个token,这样就可以执行kubectl命令了

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

    安装calico插件

    下载 https://docs.projectcalico.org/v3.11/manifests/calico.yaml

    找到yaml中的CALICO_IPV4POOL_CIDR修改它的值为刚刚设置的地址段(把原始的192.168.0.0/16 修改成了172.16.0.0/16)

    kubectl apply -f calico.yaml

    至此主节点安装完毕

    worker节点

    按照以上主节点装法,只是不执行init(calico也要装)

    最后执行主节点init命令执行后输出的join命令

    如果忘记join命令可以使用以下命令重新创建一个

    kubeadm token create --print-join-command --ttl 0

     最后在主节点可以获取节点

    kubectl  get nodes

  • 相关阅读:
    剑指 Offer 48. 最长不含重复字符的子字符串
    剑指 Offer 47. 礼物的最大价值
    剑指 Offer 42. 连续子数组的最大和
    剑指 Offer 40. 最小的k个数
    剑指 Offer 39. 数组中出现次数超过一半的数字
    剑指 Offer 34. 二叉树中和为某一值的路径
    剑指 Offer 33. 二叉搜索树的后序遍历序列
    java类与对象(属性,方法)的使用
    java--基本数据类型的转换(强制转换)
    java--基本数据类型的转换(自动转换)
  • 原文地址:https://www.cnblogs.com/cyh1282656849/p/14644531.html
Copyright © 2011-2022 走看看