kubeadm 搭建 K8s的详细过程

以下是"kubeadm 搭建 K8s的详细过程"的攻略。

准备工作

在开始kubeadm搭建Kubernetes之前,需要先完成以下准备工作:

  1. 首先确认已经在所有节点(Master节点和Worker节点)上安装好了系统,并且所有节点可以通过ssh互相访问。
  2. 各节点的主机名必须确保是正确的,不能是localhost或127.0.0.1。
  3. 确认某个节点将作为Master节点。Master节点需要满足额外的一些配置和要求,例如安装docker和kubeadm等软件包。
  4. 需要为所有节点配置时钟同步时间,确保各节点之间的时间同步相当,否则可能造成Pod无法启动的问题。
  5. 在Master节点上关闭swap分区,这是因为Kubernetes使用的是CNI网络模型,在swap分区下可能会出现一些奇怪的网络问题。
  6. 在Master节点上关闭防火墙或者允许Kubernetes相关端口的流量能够通过。

安装docker和kubeadm

在Master节点上,安装docker和kubeadm等软件包:

# 首先安装必要的工具
$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl
# 安装Docker CE
$ curl -s https://get.docker.com | bash -
# 安装kubeadm、kubelet和kubectl
$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl   # 锁定版本

上面的操作在每个节点上需要都进行。

初始化Master节点

在Master节点上运行以下命令,使用kubeadm初始化Kubernetes集群:

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16

该命令将进行以下操作:

  1. 拉取所有必需的镜像(从gcr.io/google_containers镜像库)。
  2. 配置各组件之间的加密通信。
  3. 部署API Server、Control Plane和CNI插件。
  4. 生成bootstrap token。

执行命令后,将会输出类似以下的信息:

Your Kubernetes control-plane has initialized successfully!

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

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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.13.50.12:6443 --token xxxxxxx.xxxxxxxxxxxxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

其中,我们需要记录下token和discovery-token-ca-cert-hash这两个参数。这些都是在其他节点加入集群时需要的。

为了方便操作,执行以下命令配置kubectl命令,将自动包含集群凭证:

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

确认kubelet已经在Master节点上正确地启动:

$ kubectl get nodes

输出信息中将会有该节点,状态是Ready。

安装网络插件

Kubernetes需要一个网络插件控制IP地址分配和路由管理。本教程中我们选择CNI插件。

为了部署CNI插件,我们执行以下命令:

$ kubectl apply -f https://docs.projectcalico.org/v3.5/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

该插件将被部署到kube-system命名空间下。执行下面的命令,观察Pod是否已经正确启动:

$ kubectl get pods -n kube-system

加入Worker节点

在Worker节点上,使用从Master节点获得的参数,通过kubeadm加入到集群中:

$ sudo kubeadm join 10.13.50.12:6443 --token xxxxxxx.xxxxxxxxxxxxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

提示加入成功后,可以返回到Master节点,使用以下命令观察节点是否连接成功:

$ kubectl get nodes

输出信息中应该能看到所有节点。

示例1:部署nginx

使用Deployment部署nginx服务:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.9
        ports:
        - containerPort: 80

执行以下命令部署:

$ kubectl apply -f nginx-deploy.yaml

查看Deployment状态:

$ kubectl get deployment nginx-deploy

输出结果如下:

NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   2/2     2            2           99s

示例2:部署Redis

同样的方式,我们可以定义Deployment对象部署Redis服务。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:5.0-alpine
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 6379

在执行:

$ kubectl apply -f redis-deploy.yaml

同样检查状态:

$ kubectl get deployment redis-deploy

输出结果如下:

NAME          READY   UP-TO-DATE   AVAILABLE   AGE
redis-deploy  1/1     1            1           5s

以上就是"kubeadm 搭建 K8s的详细过程"的攻略了,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:kubeadm 搭建 K8s的详细过程 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Centos7环境下YUM的搭建方法

    下面是“Centos7环境下YUM的搭建方法”的完整攻略: 1. 安装HTTP服务器和PHP 首先需要安装HTTP服务器和PHP,下面以Apache为例: # 安装Apache yum install httpd # 安装PHP yum install php 2. 配置HTTP服务器 在安装完Apache后,需要进行一些基本的配置,包括开启Apache服务…

    Linux 2023年5月14日
    00
  • Linux Pmap 命令:查看进程用了多少内存

    Pmap 提供了进程的内存映射,pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息。Pmap实际上是一个Sun OS上的命令,linux仅支持其有限的功能。但是它还是对查看完整的进程地址空间很有帮助。我们需要PID或者运行的进程的唯一进程ID来查看进程内存状态,我们可以通过/proc或者常规命令比如top或ps得到它。 语法或用…

    Linux 2023年4月12日
    00
  • 从Centos7升级到Centos8的教程(图文详解)

    下面是从CentOS7升级到CentOS8的完整攻略,包含图文详解和两条示例说明: 从CentOS7升级到CentOS8的教程(图文详解) 简介 CentOS Linux是一个企业级Linux发行版,是以Red Hat Enterprise Linux源代码为基础的。CentOS 7已经发布了很长时间,但是随着CentOS 8的发布和即将到来的CentOS …

    Linux 2023年5月14日
    00
  • Ubuntu20.10优麒麟触摸手势有哪些? 优麒麟系统新增手势汇总

    Ubuntu20.10优麒麟触摸手势有哪些? 前言 随着近年来电脑硬件的快速发展以及移动操作系统的普及,人们对于电脑的操作方式也发生了很大的变化。触摸屏电脑在逐渐普及的同时,在其使用体验上,比传统鼠标键盘方式更具有优势。 鉴于此,优麒麟系统在Ubuntu 20.10版本推出了一些新增的触摸手势功能。接下来,我们将一一解说并总结这些触摸手势的使用方法与操作实例…

    Linux 2023年5月30日
    00
  • linux 运维,代理,acl控制访问

    运维概述:运行 & 维护,Operation & MaintanceIT运维、业务运维、日常管理运维采用相关的方法、手段、技术、制度、流程和文档等,对IT运行环境、IT业务系统和IT运维人员进行的综合管理。 传统运维技术特点:单一化:业务及服务单一简单化:部署的服务与架构相对简单被动化:出现问题后,救火式的管理 linux运维最佳实践集中化自…

    Linux 2023年4月12日
    00
  • 以Centos为例讲解MySQL在Linux中的部署

    以CentOS为例讲解MySQL在Linux中的部署 环境准备 操作系统:CentOS 7 MySQL版本:MySQL 8.0 下载安装MySQL 下载MySQL MySQL官方网站提供了MySQL的源代码和二进制程序包下载。为了方便安装,我们选择使用二进制程序包方式安装MySQL。进入MySQL官网,下载相应版本的mysql-community-serve…

    Linux 2023年5月14日
    00
  • [Linux] linux路由表

    路由表用于决定数据包从哪个网口发出,其主要判断依据是目标IP地址Linux路由表其实有2个主要概念:按顺序走路由策略,在路由策略对应的路由表中匹配规则路由策略(rule)路由表(table)     查看所有的路由策略,32766那个策略最有用,对应的main路由表也是默认展示的路由表ip rule list0: from all lookup local …

    Linux 2023年4月13日
    00
  • 16、文件操作系统入门基本概念 Linux内核笔记–深入理解文件描述符

    1、文件管理系统   在大多数应用中,文件是一个核心成分,处理实时应用和一些特殊的应用外,应用程序的输入都是通过文件的形式来完成的,实际上,所有应用程序的输出都保存在文件中,这便于信息的长期存储,也便于用户将来通过应用程序访问信息。   数据或者文件归根结底是存储于物理内存空间上的,操作系统可以通过文件系统方便的管理磁盘上的文件,Linux的文件系统模型如下…

    Linux 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部