Kubernetes安装

2023-05-16

使用kubeadm创建集群

基础环境

  • 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
  • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
  • 2 CPU 核或更多
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
    • 设置防火墙放行规则
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
    • 设置不同hostname
  • 开启机器上的某些端口。
  • 参考详细信息:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#check-required-ports
    • 内网互信
  • 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。
    • 永久关闭

安装

Centos下安装

  • 首先安装Docker,参考网址:https://blog.csdn.net/qq_43556844/article/details/120604383

  • 所有机器都需要执行的命令

    # 各个机器设置自己的域名
    # 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字
    hostname
    # 修改 hostname
    hostnamectl set-hostname xxxx
    # 查看修改结果
    hostnamectl status
    # 设置 hostname 解析
    echo "127.0.0.1   $(hostname)" >> /etc/hosts
    
    # 关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    systemctl status firewalld
    
    # 将 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
    
  • 安装kubelet、kubeadm、kubectl

    • kubeadm:用来初始化集群的指令。
    • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
    • kubectl:用来与集群通信的命令行工具。
    # 设置kubernetes镜像源
    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    exclude=kubelet kubeadm kubectl
    EOF
    
    sudo yum install -y kubelet-1.21.11 kubeadm-1.21.11 kubectl-1.21.11 --disableexcludes=kubernetes
    sudo systemctl enable --now kubelet
    

    kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环
    以上部分都是初始化操作,可以制作成一个基础镜像,别的节点直接克隆该进行就可以,不用再重复进行了。

    • 添加主机点域名映射(可选),加入后方便之后用域名去访问主节点
    #所有机器添加master域名映射,以下需要修改为自己的
    echo "主机点ip  主节点域名" >> /etc/hosts
    
    • 主节点初始化
    # 新手建议使用这个
    kubeadm init \
    --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
    --control-plane-endpoint "主节点ip:6443" \
    --upload-certs
    
    当对kubernets有了一定了解的话,可以用以下命令
    #主节点初始化
    kubeadm init \
    --apiserver-advertise-address=172.31.0.4 \
    --control-plane-endpoint=主节点ip:6433 \
    --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
    --kubernetes-version v1.21.11 \
    --service-cidr=10.96.0.0/16 \
    --pod-network-cidr=192.168.0.0/16
    #所有网络范围不重叠
    
    • 之后会有如下提示 在这里插入图片描述
    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    Alternatively, if you are the root user, you can run:
    
      export KUBECONFIG=/etc/kubernetes/admin.conf
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    You can now join any number of control-plane nodes by copying certificate authorities
    and service account keys on each node and then running the following as root:
    
      kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \
        --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9 \
        --control-plane
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \
        --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9
    
    • 根据以上提示依次使用如下命令
     # 在主节点执行
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 安装网络组件
      calico官网

      curl https://docs.projectcalico.org/manifests/calico.yaml -O
      kubectl apply -f calico.yaml
      
      
    • 节点加入

      # 注意以下这两个命令使用自己提示的
          # 主机点加入使用
          kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \
      	    --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9 \
      	    --control-plane
      	# 子节点加入使用
      	 kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \
      	    --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9
      
    • 验证集群

      • 验证集群节点状
      • kubectl get nodes

Ubuntu下安装

  • 首先安装Docker,参考网址:https://blog.csdn.net/qq_43556844/article/details/120604383

  • -所有机器都需要执行的命令

    # 各个机器设置自己的域名
    # 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字
    hostname
    # 修改 hostname
    hostnamectl set-hostname xxxx
    # 查看修改结果
    hostnamectl status
    # 设置 hostname 解析
    echo "127.0.0.1   $(hostname)" >> /etc/hosts
    
    # 关闭防火墙
    ufw disable
    setenforce 0
    # 重置路由表
    iptables -P FORWARD ACCEPT
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
    # 关闭交换分区
    swapoff -a
    # 还要修改/etc/fstab文件注释掉swap分区
    
    • 设置镜像源
    sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    # 安装
    sudo yum install -y kubelet-1.21.11 kubeadm-1.21.11 kubectl-1.21.11 --disableexcludes=kubernetes
    sudo systemctl enable --now kubelet
    
    • 主节点初始化
    kubeadm init \
    	--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
    	--control-plane-endpoint "主节点ip:6443" \
    	--upload-certs
    
    • 根据以上提示依次使用如下命令
     # 在主节点执行
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • 安装网络插件
    # weave
    - kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    # flannel
    # kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

部署dashboard

  • 部署
  • kubernetes官方提供的可视化界面,参考网址:https://github.com/kubernetes/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
    
    • Dashboard部署完成后,就可以访问 https://集群任意IP:端口 https://集群ip:32759
      • 但是目前Kubernetes Dashboard ,只支持使用 Bearer Token登录。 由于 Kubernetes Dashboard 默认部署时,只配置了最低权限的RBAC。因此,我们要创建一个名为 admin-user 的 ServiceAccount,再创建一个 ClusterRolebinding,将其绑定到 Kubernetes 集群中默认初始化的 cluster-admin 这个 ClusterRole。
      • 创建 Service Account 和 ClusterRoleBinding
      • 使用 kubeadm 安装集群时,默认创建了 ClusterRole cluster-admin。此时我们可以直接为刚才的 ServiceAccount 创建 ClusterRoleBinding。
      • 创建一个管理员用户
      #创建访问账号,准备一个yaml文件; vi admin-user.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 admin-user.yaml部署
    • 获取管理员用户的Token
    • 令牌访问
    #获取访问令牌
    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,之后登录使用token令牌方式登录

Kubernets管理工具kuboard

参考:https://kuboard.cn/install/v3/install-in-k8s.html#%E5%AE%89%E8%A3%85

  • 在Kubernets中安装kuboard
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
  • 等待 Kuboard v3 就绪
  • 执行指令 watch kubectl get pods -n kuboard,等待 kuboard 名称空间中所有的 Pod 就绪
  • 访问 Kuboard
  • 在浏览器中打开链接 http://your-node-ip-address:30080
  • 输入初始用户名和密码,并登录
    • 用户名: admin
    • 密码: Kuboard123

一些基础命令:

#查看集群所有节点
kubectl get nodes
#根据配置文件,给集群创建资源
kubectl apply -f xxxx.yaml
#查看集群部署了哪些应用?
docker ps   ===   kubectl get pods -A
# 运行中的应用在docker里面叫容器,在k8s里面叫Pod
kubectl get pods -A
# 新令牌(即加入的主节点中时候的命令)
kubeadm token create --print-join-command
# 移除 worker 节点
# 在准备移除的 worker 节点上执行
# 重置
kubeadm reset
# 在第一个 master 节点上执行
kubectl delete node demo-worker-x-x
# 为节点设置标签
kubectl label node <node-name> node-role.kubernetes.io/worker=worker
# 设置master为可执行node节点(可选),默认是主节点是不能安装pod的
kubectl taint nodes --all node-role.kubernetes.io/master-
# 配置ApiServer SSL证书
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d > kubecfg.crt
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d > kubecfg.key
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

使用sealos进行一键部署

可以参考官方:
Github地址
官方文档

基于WSL2和Kind或Minikube:搭建Windows版Kubernetes

参考网址:
https://blog.csdn.net/fly910905/article/details/106679756
https://zhuanlan.zhihu.com/p/426227999

参考网址:https://zhuanlan.zhihu.com/p/146515102

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes安装 的相关文章

随机推荐

  • vsc code-runner插件运行python文件,解释器更改为ananconda

    code runner刚下载下来的默认解释器是系统自带的 xff0c 并不是anaconda的 选择文件 首选项 找到code runner executor map 找到python的命令 xff0c 改为自己的解释器位置即可
  • NT_STATUS_ACCESS_DENIED listing \*

    在centos8上配了个SAMBA与windows共享文件 访问共享目录出现 NT STATUS ACCESS DENIED listing xff0c smb gt span class token operator span span
  • RocketMQ发送普通消息的所有方法以及代码示例

    RocketMQ发送普通消息的所有方法以及代码示例 一 使用RocketMQTemplate发送消息 xff08 整合Springboot xff09 xff08 1 xff09 void send Message lt gt messag
  • C语言总结day01

    day01 1 C语言标识符 C语言标识符需满足以下条件 只能由英文字母 26个英文字母 xff0c 包括大小写即共52个 数字 0 9 和下划线组成长度为1 32必须以英文字母或下划线开头 2 C语言风格 C语言严格区分英文字母的大小写C
  • C语言总结day02

    day02 1 运算符 算术运算符 单目运算符 xff1a 43 正 xff1b 负 xff1b 双目运算符 xff1a 这三个同级 gt 43 这两个同级 注意 xff1a 前边三个的优先级大于后边的两个 xff1b 双目运算符两边运算数
  • C语言总结day03

    day03 1 数据的输入输出 数据的输出 xff1a 从计算机向输出设备 如显示器 打印机等 输出数据称为输出 数据的输入 xff1a 从输入设备 如键盘 磁盘 光盘 扫描仪等 向计算机输入数据称为输入 C语言函数库中有一批 34 标准输
  • C语言总结day04

    day04 1 int a n 是错误的 C语言中不允许对数组的大小作动态定义 2 字符数组的初始化 char a 61 I am Student char a 10 利用for语句对每个进行初始化 3 字符数组的输入和输出输入 char
  • C语言总结day06

    day06 1 定义和使用结构体变量 C语言允许用户建立由不同类型数据组成的组合型的数据结构 xff0c 它称为结构体 声明格式 struct 结构体名 成员列表 定义结构体类型变量 struct 结构体名 结构体变量 在声明类型的同时定义
  • C语言总结day07

    day07 一些概念理解 1 为什么使用指针 每一个编程语言都使用指针C 43 43 将指针暴露给了 用户 xff08 程序员 xff09 xff0c 而java和C 等语言则将指针隐蔽起来了 2 指针和引用的区别 本质 xff1a 引用是
  • C语言总结day05

    day05 1 函数间可以相互调用 xff0c 但是不能调用main函数 xff0c main函数是被操作系统调用的 2 数组作为函数参数 数组元素可以作函数参数 值传递 注意 xff1a 数组元素可以用作函数实参 xff0c 不能用作形参
  • SSM-Spring入门

    Spring学习 1 Spring简介 Spring是什么 Spring是分层的Java SE EE应用full stack轻量级开源框架 xff0c 是以loC Inverse Of Contorl 反转控制 和AOP Aspect Or
  • SSM-Spring学习(二)

    Spring IoC和DI注解开发 Spring配置数据源 数据源 xff08 连接池 xff09 介绍 xff1a 数据库连接池概念 百度百科 xff1a 数据库连接池负责分配 管理和释放数据库连接 xff0c 它允许应用程序重复使用一个
  • SSM-Spring(三)-AOP

    简介 什么是 AOP AOP 为 span class token class name Aspect span span class token class name Oriented span span class token clas
  • RocetMQ发送顺序消息的所有方法以及代码示例

    RocetMQ发送顺序消息的所有方法以及代码示例 一 使用RocketMQTemplate发送顺序消息 xff08 1 xff09 SendResult syncSendOrderly String destination Message
  • Spring(四)---Spring Jdbc Template基本使用

    1 概述 JdbcTemplate是spring框架中提供的一个对象 xff0c 是对原始繁琐的Jdbc API对象的简单封装 spring框架 为我们提供了很多的操作模板类 例如 xff1a 操作关系型数据的JdbcTemplate和Hi
  • SpringMVC(一)------快速入门

    Spring与Web环境集成 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext spring配置文件 方式获取的 xff0c 但是每次从容器中获
  • SpringMVC(二)-----SpringMVC的请求和响应

    SpringMVC的数据响应 SpringMVC的数据响应 数据响应方式 理解 页面跳转 直接返回字符串通过ModelAndView对象返回 回写数据 直接返回字符串返回对象或集合 SpringMVC的数据响应 页面跳转 返回字符串形式 x
  • SpringMVC(三)------SpringMVC的文件上传

    SpringMVC的请求 文件上传 客户端表单实现 应用 文件上传客户端表单需要满足 xff1a 表单项type 61 file 表单的提交方式是post表单的enctype属性是多部分表单形式 xff0c 及enctype 61 mult
  • Keil 安装

    Keil v5 C51和MDK共存 准备工具 C51版本 Keil xff08 如C51v959 xff09 MDK版本 xff08 如MDK525 xff09 激活工具 keil keygen 需要的Pack包 Keil STM32F1x
  • Kubernetes安装

    使用kubeadm创建集群 基础环境 一台兼容的 Linux 主机 Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令每台机器 2 GB 或更多的 RAM