最精简kubernetes(1.15.1)(k8s)集群部署教程--基于CentOS 7

2024-02-23 15:32

本文主要是介绍最精简kubernetes(1.15.1)(k8s)集群部署教程--基于CentOS 7,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、k8s环境要求

  • 运行以下之一的一台或多台机器:
    • Ubuntu 16.04+
    • Debian 9
    • CentOS 7
    • RHEL 7
    • Fedora 25/26 (best-effort)
    • HypriotOS v1.0.1+
    • Container Linux (tested with 1800.6.0)
  • 每台机器2 GB或更多的RAM(任何更少的内存将为您的应用留下很小的空间)
  • 2个CPU或更多
  • 群集中所有计算机之间的网络连通
  • 每个节点有唯一主机名,MAC地址和product_uuid(一般只用关注主机名)
  • 端口在您的计算机上打开(这个一般都会满足)
  • 禁用Swap。必须禁用Swap才能使kubelet正常工作(Swap disabled)

二、开始安装(CentOS7)

修改hostname及hosts

  1. 修改机器主机名,我这里改为k8s-master、k8s-node1、k8s-node2、k8s-node3
    vi /etc/hostname
  2. 添加hosts
    vi /etc/hosts
  3. 修改完成后重启
  4. 重启后,各机器通过主机名可互相ping通 各节点能ping通

安装docker

docker版本需要和k8s版本匹配,1.15.1需要docker至少是18.09及以上版本

  • 卸载旧版本(没安装可忽略)

    # 在 master 节点和 worker 节点都要执行
    sudo yum remove -y docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine
    
  • 删除镜像、容器等
    rm -rf /var/lib/docker

  • 设置 yum repository

    # 在 master 节点和 worker 节点都要执行
    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
  • 安装docker

    # 在 master 节点和 worker 节点都要执行
    sudo yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
    
  • 修改cgroup,创建或修改/etc/docker/daemon.json:

    {"exec-opts": ["native.cgroupdriver=systemd"]
    }
    
  • 启动及开机启动

    systemctl start docker
    systemctl enable docker
    
  • 检查 docker 版本及cgroup

    # 在 master 节点和 worker 节点都要执行
    docker version
    docker info | grep Cgroup   # 结果:Cgroup Driver: systemd
    

k8s前期环境配置

  • 配置k8s的yum源

    # 在 master 节点和 worker 节点都要执行
    cat <<EOF > /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.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
  • 关闭 防火墙、SeLinux、swap

    # 在 master 节点和 worker 节点都要执行
    systemctl stop firewalld
    systemctl disable firewalldsetenforce 0
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/configswapoff -a
    yes | cp /etc/fstab /etc/fstab_bak
    cat /etc/fstab_bak |grep -v swap > /etc/fstab
    
  • 修改 /etc/sysctl.conf

    # 在 master 节点和 worker 节点都要执行
    vim /etc/sysctl.conf# 向其中添加
    vm.swappiness = 0
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    
  • 执行命令以应用

    # 在 master 节点和 worker 节点都要执行
    sysctl -p
    

k8s安装

  • 安装kubelet、kubeadm、kubectl
    # 在 master 节点和 worker 节点都要执行
    yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
    
  • 启动 kubelet
    # 在 master 节点和 worker 节点都要执行
    systemctl enable kubelet && systemctl start kubelet
    

集群初始化

  • 使用kubeadm config print init-defaults可以打印集群初始化默认的使用的配置,根据此制作出本次使用kubeadm初始化集群所需的配置文件kubeadm.yaml(根据自身情况修改)

    # 在master上创建kubeadm-config.yaml
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: InitConfiguration
    localAPIEndpoint:advertiseAddress: k8s-masterIP地址  # 需要修改bindPort: 6443
    nodeRegistration:taints:- effect: PreferNoSchedulekey: node-role.kubernetes.io/master
    ---
    apiVersion: kubeadm.k8s.io/v1beta2
    kind: ClusterConfiguration
    kubernetesVersion: v1.15.1
    imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
    controlPlaneEndpoint: "k8s-master:6443"    #需要修改
    networking:podSubnet: 10.244.0.0/16  #每种网络配置不同
    
  • podSubnet 所使用的网段不能与节点所在的网段重叠

  • 初始化master

    # 只在 master 节点执行
    kubeadm init --config=kubeadm-config.yaml --upload-certs
    

    根据您服务器网速的情况,您需要等候 1 – 10 分钟

  • 执行结果如下图所示:

    Your Kubernetes master has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:/docs/concepts/cluster-administration/addons/You can now join any number of machines by running the following on each node
    as root:kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
    
  • 初始化 root 用户的 kubectl 配置

    # 只在 master 节点执行
    rm -rf  $HOME/.kube/
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    

安装pod网络

  • 官网上有多种网络可选,每种网络都有自己的网段ip范围,和kubeadm-config.yaml里配置的podSubnet对应,也就是你想装那种网络,podSubnet就配置上对应的网段,这里选择安装flannel
    kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
    
  • 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
    watch kubectl get pod -n kube-system
    

加入集群

  • 获得 join命令参数
    # 只在 master 节点执行
    kubeadm token create --print-join-command
    
  • 可获取kubeadm join 命令及参数,如下所示
    # kubeadm token create 命令的输出
    kubeadm join k8s-master:6443 --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
    
  • 在所有的 node节点执行
    kubeadm join k8s-master:6443 --token mpfjma.4vjjg8flqihor4vt     --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
    
  • 检测结果
    # 只在 master 节点执行
    kubectl get nodes
    
    结果
    在这里插入图片描述

三、其他

从master以外的节点控制集群

将API服务器代理到localhost

四、卸载集群

  • 集群重置
    #所有节点
    kubeadm reset
    
  • 卸载
    #所有节点
    yum remove kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
    

六、问题排查日志查看

  • 查看系统日志
    tail -f /var/log/messages
  • 查看pod描述,也可用于查看其他组件
    kubectl describe pod pod-name -n namespace
  • 查看pod日志
    kubectl logs pod-name -n namespace
  • 进入容器
    kubectl exec -it pod-name -n namespace -- /bin/bash

五、k8s常用命令

  • kubectl create namespace quota-pod-example
  • kubectl label node centos-2gb-sfo1-03 role=frontend
  • kubectl apply -f deployment.yaml
  • kubectl delete -f deployment.yaml
  • kubectl label node nodeName label=a
  • kubectl get node --show-labels
  • kubectl label node nodeName label-删除label标签
  • kubectl -n kube-system get pods | grep Evicted |awk '{print$1}'|xargs kubectl -n kube-system delete pods 批量删除被驱逐pod;

如果需要安装更高版本,需要更新docker版本和k8s版本,其他周边配置不变;

整理不易,感谢赞赏~~~~

在这里插入图片描述

这篇关于最精简kubernetes(1.15.1)(k8s)集群部署教程--基于CentOS 7的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739087

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示