NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • Linux

  • Docker

  • 云原生

  • Kubernetes

    • kubectl - 常用命令
    • 概念
    • 安装
      • 前置条件
        • 安装Docker
        • 设置
        • 镜像源(可选)
      • 安装 kubeadm
      • 启动kubelet
      • 下载Docker镜像
        • Master
        • 节点
      • 修改hosts
      • 主节点-初始化
      • 主节点-安装网络组件
      • 工作节点-加入集群
      • 安装dashboard可视化
      • 参考
    • 操作
    • 负载均衡
    • Service
    • Ingress(网关)
    • 存储抽象
    • 网络
    • 笔记

    • helm

    • 示例

  • KubeSphere

  • K3S

  • 笔记

  • PVE

  • 维修

  • DevOps

  • 云服务

  • 路由器

  • Hyper-V

  • Windows

  • macOS

  • 运维
  • Kubernetes
NipGeihou
2022-10-20
目录

安装

笔记

此篇尝试基于 kubeadm 的非高可用 Kubernetes 集群安装,它并不完整,且可代替的方案有很多,比如 k3s、minikube,或是直接购买云厂商的 k8s 集群服务。

# 前置条件

# 安装 Docker

# 一键安装
curl -sSL https://get.daocloud.io/docker | sh

# 设置

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。推荐使用 Ubuntu。

  • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)

  • 2 CPU 核或更多

  • 集群中的所有机器的网络彼此均能相互连接 (公网和内网都可以)

    • 设置防火墙放行规则
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里 (opens new window)了解更多详细信息。

    • 设置不同 hostname

      # 查看主机名
      hostname
      
      # 修改主机名
      hostnamectl set-hostname <新名字>
      
  • 开启机器上的某些端口。请参见这里 (opens new window) 了解更多详细信息。

    • 内网互信
  • 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。

    • 永久关闭

笔记

在极客时间 - 张磊的教程中,并不需要此笔

    #各个机器设置自己的域名
    hostnamectl set-hostname xxxx
    
    # 将 SELinux 设置为 permissive 模式(相当于将其禁用)
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
    #关闭swap
    swapoff -a  
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
    #允许 iptables 检查桥接流量
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sudo sysctl --system
    
    #各个机器设置自己的域名
    hostnamectl set-hostname xxxx
    
    # 将 SELinux 设置为 permissive 模式(相当于将其禁用) 默认没有安装
    
    #关闭swap
    swapoff -a  
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
    #允许 iptables 检查桥接流量
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    sudo sysctl --system
    
    // Make sure to add code blocks to your code group

    # 镜像源(可选)

      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
      
      apt-get update && apt-get install -y apt-transport-https
      curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
      cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
      deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
      EOF
      
      // Make sure to add code blocks to your code group

      参考:https://developer.aliyun.com/mirror/kubernetes

      # 安装 kubeadm

      安装 kubelet、kubeadm 和 kubectl,并锁定其版本

        sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
        
        sudo apt update
        sudo apt install kubelet=1.20.9-00
        sudo apt install kubeadm=1.20.9-00
        sudo apt install kubectl=1.20.9-00
        sudo apt-mark hold kubelet kubeadm kubectl
        
        // Make sure to add code blocks to your code group

        # 启动 kubelet

        sudo systemctl enable --now kubelet
        
        systemctl status kubelet #检查状态
        

        # 下载 Docker 镜像

        # Master

        sudo tee ./images.sh <<-'EOF'
        #!/bin/bash
        images=(
        kube-apiserver:v1.20.9
        kube-proxy:v1.20.9
        kube-controller-manager:v1.20.9
        kube-scheduler:v1.20.9
        coredns:1.7.0
        etcd:3.4.13-0
        pause:3.2
        )
        for imageName in ${images[@]} ; do
        docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
        done
        EOF
           
        chmod +x ./images.sh && ./images.sh
        

        # 节点

        docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/kube-proxy:v1.20.9
        

        # 修改 hosts

        所有服务器执行

        echo "<主节点内网IP>  cluster-endpoint" >> /etc/hosts
        

        # 主节点 - 初始化

        kubeadm init \
        --apiserver-advertise-address=<主节点内网IP> \
        --control-plane-endpoint=cluster-endpoint \
        --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
        --kubernetes-version v1.20.9 \
        --service-cidr=10.96.0.0/16 \
        --pod-network-cidr=192.168.0.0/16
        

        cluster-endpoint :hosts 映射的域名

        提示this Docker version is not on the list of validated versions: 20.10.5+dfsg1...版本过高

        这是一个 warning 警告,无视即可!

        master主节点初始化报错 /proc/sys/net/ipv4/ip_forward contents are not set to 1

        允许数据包转发

        临时生效:

        echo 1 > /proc/sys/net/ipv4/ip_forward
        

        永久生效:

        编辑 /etc/sysctl.conf 文件,修改成 net.ipv4.ip_forward = 1 ,然后执行 sysctl -p 可以立即生效

        看到 Your Kubernetes control-plane has initialized successfully!

        image-20221021000000975

        复制保存这段内容,稍后用到!有效期 24 小时

        • 上面一段 join 命令,在其他服务器执行,作为主结点
        • 下面一段 join 命令,在其他服务器执行,加入普通结点

        image-20221021000138046

        查看集群所有节点

        kubectl get nodes
        

        # 主节点 - 安装网络组件

        calico 官网 (opens new window)

        # 下载配置
        curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
        
        # 应用到k8s
        kubectl apply -f calico.yaml
        

        # 工作节点 - 加入集群

        复制上面主节点初始化成功后的,下面那段命令。

        工作结点服务器执行时卡住

        检查主节点服务器防火墙是否关闭

        主节点检查结点状态

        root@VM-12-12-debian:~# kubectl get nodes
        NAME              STATUS   ROLES                  AGE     VERSION
        vm-12-12-debian   Ready    control-plane,master   28m     v1.20.9
        vm-12-16-debian   Ready    <none>                 2m21s   v1.20.9
        vm-12-9-debian    Ready    <none>                 2m33s   v1.20.9
        

        如果 status 不是 ready 就使用 kubectl get pods -A 查看下

        主节点初始化时的加入令牌过期了怎么办?

        在主节点运行 kubeadm token create --print-join-command 创建新令牌

        # 安装 dashboard 可视化

        下载配置

        kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
        

        设置访问端口

        kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
        

        把 type: ClusterIP 改为 type: NodePort

        查看端口

        kubectl get svc -A |grep kubernetes-dashboard
        

        访问 https://<ip>:<端口>

        部署成功后无法访问,如超时

        查看 pod (容器) 部署在 node 上

        kubectl describe pod -n <命名空间> <pod名称>
        

        访问 node 的 ip 地址即可访问成功!

        创建访问账号

        dash.yaml

        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
        
        kubectl apply -f dash.yaml
        

        获取访问令牌

        kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
        

        生成的 token 复制到网页

        # 参考

        • 安装 kubeadm | Kubernetes (opens new window)
        上次更新: 2024/03/11, 22:37:05
        概念
        操作

        ← 概念 操作→

        最近更新
        01
        iSCSI服务搭建
        05-10
        02
        磁盘管理与文件系统
        05-02
        03
        网络测试 - iperf3
        05-02
        更多文章>
        Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
        • 跟随系统
        • 浅色模式
        • 深色模式
        • 阅读模式