序言

走得最慢的人,只要不丧失目标,也比漫无目的地徘徊的人走得快。

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级重要
  • 蓝色:用来标记二级重要

希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流

写在前面

k8s作为⼀个相对⽐较复杂的系统,它有⼀定的⼊⻔⻔槛,我曾浏览它的⽂档很多次,光是在安装的环节上就耗费很久,劝退指数极⾼,但是我们不需要⼀开始就花费很多的时间从安装开始接触它

所以我们可以借⽤Docker-Desktop快速启动⼀个本地化最⼩集群,能让我们快速上⼿演练,随着对k8s的理解加深,安装的部分也就迎刃⽽解了。

1 安装

打开Docker-desktop,进⼊设置,可以看到有kubernetes选项,注意不同的docker版本,这⾥的k8s版本也有区别,

你可以直接点击Enable的话,等一会,如果成功的话,就直接安装就行了,安装成功,可以看到这一个信息

安装成功

kubectl get nodes
 

不成功情况

如果不成功,⼤概率因为k8simage拉取问题,导致是⽆法启动的,所以这⾥要先解决镜像

可以从国内镜像源拉取,然后修改镜像名称,这样就可以了

⽐如这台电脑,⿊苹果由于系统版本10.15.7,⽀持的docker-desktop版本⽐较⽼⼀点,所以这⾥的k8s版本是v1.24.0,

修改镜像源

下⾯就可以通过写好的脚本从阿⾥云拉取镜像,注意替换你的k8s版本,关于etcd,coredns的版本可以查⼀下ChatGPT,让它快速告诉你指定k8s对应的这两者的版本,或者保持不动,因为理论上这两个基础组件在1.24和1.25变化不⼤的,应该可以兼容:

  1.  
    #!/bin/bash
  2.  
     
  3.  
    set -e
  4.  
    KUBE_VERSION=v1.24.0
  5.  
    KUBE_PAUSE_VERSION=3.5
  6.  
    ETCD_VERSION=3.4.13-0
  7.  
    COREDNS_VERSION=1.8.0
  8.  
    GCR_URL=k8s.gcr.io
  9.  
    ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
  10.  
    # get images
  11.  
    images=(kube-proxy:${KUBE_VERSION}
  12.  
    kube-scheduler:${KUBE_VERSION}
  13.  
    kube-controller-manager:${KUBE_VERSION}
  14.  
    kube-apiserver:${KUBE_VERSION}
  15.  
    pause:${KUBE_PAUSE_VERSION}
  16.  
    etcd:${ETCD_VERSION}
  17.  
    coredns:${COREDNS_VERSION})
  18.  
    for imageName in ${images[@]} ; do
  19.  
    docker pull $ALIYUN_URL/$imageName
  20.  
    docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
  21.  
    docker rmi $ALIYUN_URL/$imageName
  22.  
    done
  23.  
    # show images
  24.  
    docker images

执⾏等待拉取完毕后检查⼀下,然后就可以点击Enable了,需要等待⼏分钟。

K8S显⽰运⾏成功后,你可以在shell中运⾏kubectl命令查看节点状态:

kubectl get nodes
 

2 测试

部署Nginx

可以看到⼀个单节点的集群就运⾏起来了,下⾯我们简单跑⼀个development容器看⼀下集群⼯作状态是否正常,这⾥可以先不管这些yaml⽂件描述的什么,

部署 Deployment

可以使用Kubernetes来部署Nginx。以下是一个简单的Deployment示例:

  1.  
    apiVersion: apps/v1
  2.  
    kind: Deployment
  3.  
    metadata:
  4.  
    name: nginx-deployment
  5.  
    spec:
  6.  
    replicas: 1
  7.  
    selector:
  8.  
    matchLabels:
  9.  
    app: nginx
  10.  
    template:
  11.  
    metadata:
  12.  
    labels:
  13.  
    app: nginx
  14.  
    spec:
  15.  
    containers:
  16.  
    - name: nginx
  17.  
    image: nginx:latest
  18.  
    ports:
  19.  
    - containerPort: 80
  20.  
    - containerPort: 443

解释一下上述的YAML文件:

  • kind: Deployment表示创建一个Deployment。
  • metadata.name:指定Deployment的名称。
  • spec.replicas:设置replica数量为1。
  • selector.matchLabels:定义了应该匹配哪些Pod,使用app: nginx标签匹配。
  • template.metadata.labels:为此Deployment创建一个独立的Pod。
  • spec.containers:定义了一个名为nginx的容器,在此容器中运行Nginx镜像。
  • ports:将容器的80公开。

执行以下命令创建Deployment:

kubectl apply -f deployment.yaml
 

在Kubernetes中使用kubectl get deployments命令可以看到Deployment已经成功创建了。我们还可以使用以下命令查看Pod运行状态:

kubectl get pods
 

如果一切正常,你应该能够看到类似下面的输出:

  1.  
    NAME READY STATUS RESTARTS AGE
  2.  
    nginx-deployment-6b67fd5895-p8qs8 1/1 Running 0 25s

部署service

现在,Nginx已经在Kubernetes中以Deployment的方式部署好了。如果需要通过外部IP访问Nginx服务,还需要创建一个Service。

可以通过创建一个Service将Nginx服务暴露给集群外部IP。

以下是一个简单的Service示例,将Nginx Service暴露的端口设置为NodePort类型,

使用NodePort类型的Service可以将集群内部的服务端口映射到集群外部的一个随机端口上:

  1.  
    apiVersion: v1
  2.  
    kind: Service
  3.  
    metadata:
  4.  
    name: nginx-service
  5.  
    spec:
  6.  
    selector:
  7.  
    app: nginx
  8.  
    ports:
  9.  
    - name: http
  10.  
    protocol: TCP
  11.  
    port: 80
  12.  
    targetPort: 80
  13.  
    nodePort: 30001
  14.  
    type: NodePort

解释一下上述的YAML文件:

  • kind: Service表示创建一个Service。
  • metadata.name: 指定Service的名称。
  • spec.selector: 将Service绑定到定义了app: nginx标签的Pod列表。
  • spec.ports: 定义了Nginx服务的端口信息。
  • type: NodePort 表示Service类型为NodePort,将指定的端口暴露给集群外部IP以供访问。

执行以下命令创建Service:

kubectl apply -f service.yaml
 

现在,我们可以通过以下命令查看创建的Service:

kubectl get services
 

如果一切正常,你应该能够看到类似下面的输出:

  1.  
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  2.  
    nginx-service NodePort 10.108.90.45 <none> 80:30001/TCP

在上面的输出结果中, 30001 端口对应着Nginx的HTTP端口,

如果你使用的是云服务提供商的集群,可以找到具体的EXTERNAL-IP地址,然后在浏览器中输入 EXTERNAL-IP:30001 来访问Nginx服务。

如果你使用的是本地单节点的集群,可以在本地使用 localhost:30001  访问Nginx服务。

完整脚本:

  1.  
    apiVersion: apps/v1
  2.  
    kind: Deployment
  3.  
    metadata:
  4.  
    name: nginx-deployment
  5.  
    spec:
  6.  
    replicas: 1
  7.  
    selector:
  8.  
    matchLabels:
  9.  
    app: nginx
  10.  
    template:
  11.  
    metadata:
  12.  
    labels:
  13.  
    app: nginx
  14.  
    spec:
  15.  
    containers:
  16.  
    - name: nginx
  17.  
    image: nginx:latest
  18.  
    ports:
  19.  
    - containerPort: 80
  20.  
    - containerPort: 443
  21.  
     
  22.  
     
  23.  
    ---
  24.  
    apiVersion: v1
  25.  
    kind: Service
  26.  
    metadata:
  27.  
    name: nginx-service
  28.  
    spec:
  29.  
    selector:
  30.  
    app: nginx
  31.  
    ports:
  32.  
    - name: http
  33.  
    protocol: TCP
  34.  
    port: 80
  35.  
    targetPort: 80
  36.  
    nodePort: 30001
  37.  
    type: NodePort

执行命令

kubectl apply -f nginx.yml
 

图书推荐

图书名称:《ChatGPT时代:ChatGPT全能应用一本通》

内容简介

本书从ChatGPT等自然语言大模型基础知识讲起,重点介绍了ChatGPT等语言大模型在生活中的实际应用,让每一个人都能了解未来的生活和工作。

本书分为16章,涵盖的主要内容有人工智能、OpenAI、ChatGPT的介绍、ChatGPT的使用技巧,向大家展现ChatGPT在学术教育、商业管理、新媒体、办公、求职、法律、电商等不同领域的应用,以及ChatGPT当下的问题、大模型的未来。

本书通俗易懂,用最简单的语言解释人工智能的入门知识,案例丰富,实用性强,适合每一个想要了ChatGPT等自然语言处理大模型的读者和进阶爱好者阅读,也适合想要通过API打造新时代语言模型应用的开发者。

作者简介

江涵丰,10年科技行业从业者,科技/人工智能领域知名自媒体人。北美工商管理学硕士,获麻省理工人工智能与商业战略相关认证,注册供应链管理师。曾是硅谷科技企业运营管理层,后担任前亚洲第一科技展会CES Asia项目主管,拥有丰富的北美与国内科技行业市场研究、运营管理、数字营销等领域的理论基础和实战经验。

等不及的小伙伴。可以点击下方链接先睹为快

《ChatGPT时代:ChatGPT全能应用一本通 》

参与方式

图书数量:本次送出 3 本   !!!️️️
活动时间:截止到 2023-05-16 12:00:00

抽奖方式:

  • 2本,留言+该留言论赞数的前两名各获得一本!
  • 1本,评论区随机挑选一位小伙伴送书一本!
  • 留言内容:“时间永远是旁观者,所有的过程和结果,都需要我们自己去承担。”

参与方式:关注博主、点赞、收藏,评论区留言

中奖名单

 获奖名单

中奖名单:请关注博主动态

名单公布时间:2023-05-16 下午

中奖用户:
【评论点赞前2名】
1.[30]几分醉意.@几分醉意.️️️
1.[29]陈老老老板@陈老老老板️️
【随机抽取】
3.Anitalin00@Anitalin00️

恭喜以上中奖的小伙伴,请及时联系博主!!

为防止错过中奖信息,可根据文章底部信息添加博主,添加时请备注csdn-[昵称]

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
技术沟通 | 交流 | 合作


微信名片

【K8S系列】快速初始化⼀个最⼩集群的更多相关文章

  1. kubernetes(K8S)快速安装与配置集群搭建图文教程

    kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...

  2. 大数据系列(2)——Hadoop集群坏境CentOS安装

    前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...

  3. mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  4. 简单了解一下K8S,并搭建自己的集群

    距离上次更新已经有一个月了,主要是最近工作上的变动有点频繁,现在才暂时稳定下来.这篇博客的本意是带大家从零开始搭建K8S集群的.但是我后面一想,如果是我看了这篇文章,会收获什么?就是跟着步骤一步一走吗 ...

  5. K8s 实践 | 如何解决多租户集群的安全隔离问题?

    作者 | 匡大虎  阿里巴巴技术专家 导读:如何解决多租户集群的安全隔离问题是企业上云的一个关键问题,本文主要介绍 Kubernetes 多租户集群的基本概念和常见应用形态,以及在企业内部共享集群的业 ...

  6. lvs+keepalived部署k8s v1.16.4高可用集群

    一.部署环境 1.1 主机列表 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 lvs-keepal ...

  7. Centos7.6部署k8s v1.16.4高可用集群(主备模式)

    一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...

  8. 用Docker swarm快速部署Nebula Graph集群

    用Docker swarm快速部署Nebula Graph集群 一.前言 本文介绍如何使用 Docker Swarm 来部署 Nebula Graph 集群. 二.nebula集群搭建 2.1 环境准 ...

  9. 使用kubeadm初始化IPV4/IPV6集群

    使用kubeadm初始化IPV4/IPV6集群 图片 CentOS 配置YUM源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kube ...

  10. 大数据系列(5)——Hadoop集群MYSQL的安装

    前言 有一段时间没写文章了,最近事情挺多的,现在咱们回归正题,经过前面四篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,相关的两款软件VSFTP和SecureCRT也已经正常安装了. ...

随机推荐

  1. umich cv-2-1

    UMICH CV Linear Classifiers 对于使用线性分类器来进行图片分类,我们可以给出这样的参数化方法: 而对于这样一个式子,我们怎么去理解呢? 首先从代数的角度,这个f(x,W)就是 ...

  2. Django框架——模型层单表操作、模型层多表操作、模型层常用和非常用字段和参数、模型层进阶

    文章目录 1 模型层-单表操作 一 ORM简介 二 单表操作 2.1 创建表 1 创建模型 2 更多字段 3 更多参数 4 settings配置 5 增加,删除字段 2.2 添加表纪录 2.3 查询表 ...

  3. 关于AI时代的程序架构的变化

    以ChatGPT为代表的AI出现,表示着AI的零点时刻已经突破.现在AI的使用已经不用再多说了,实际上是已经侵入到各行各业.所有人都在疯狂寻找本行业AI的使用场景,这样的盛景只在互联网刚出现的时候能感 ...

  4. js下IE和FF的一些兼容写法总结

    一.脚本差异: 1.事件绑定:addEventListener 与 attachEvent  事件处理函数中this指向不同, IE中指向window 2.获取事件对象 :事件处理函数     win ...

  5. Python 继承和子类示例:从 Person 到 Student 的演示

    继承允许我们定义一个类,该类继承另一个类的所有方法和属性.父类是被继承的类,也叫做基类.子类是从另一个类继承的类,也叫做派生类. 创建一个父类 任何类都可以成为父类,因此语法与创建任何其他类相同: 示 ...

  6. VM虚拟机在添加虚拟硬盘后无法boot的解决方案

    今天本想自己配一个mini Linux系统,但是在给系统增加一块硬盘的时候,发现出现以下问题 CentOS打不开(其实经过很久也能进去,但是指令全部失效) 由于不知道原因最后就重装了系统,奇怪的是,重 ...

  7. Unity学习笔记--基础

    基础 3D数学 Mathf函数库 print(Mathf.PI); print(Mathf.Abs(-10)); print(Mathf.CeilToInt(1.2f));//向上取整 print(M ...

  8. 3款免费又好用的 Docker 可视化管理工具

    前言 Docker提供了命令行工具(Docker CLI)来管理Docker容器.镜像.网络和数据卷等Docker组件.我们也可以使用可视化管理工具来更方便地查看和管理Docker容器.镜像.网络和数 ...

  9. 浅谈斜率优化DP

    前言 考试 T2 出题人放了个树上斜率优化 DP,直接被同校 OIER 吊起来锤. 离 NOIP 还有不到一周,赶紧学一点. 引入 斜率 斜率,数学.几何学名词,是表示一条直线(或曲线的切线)关于(横 ...

  10. 写代码不用"if"行不行,曾经的反 if 运动

    如果在IT行业的时间够长的话,可能还记得大约10几年前,设计模式风靡一时的时候,有过一段反 "if" 的运动. 所谓的反"if"运动,其实是夸大了"i ...