序言

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

文章标记颜色说明:

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

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

写在前面

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. 在deepin上使用Fleet开发SpringBoot 3.0.0项目

    前言 Fleet被称为是由 JetBrains 打造的下一代 IDE,目前出于公测状态,可以免费下载使用. SpringBoot 3.0.0最小支持是JDK 17,这或许是对于JDK8的断舍离迈出的重 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (105)-- 算法导论10.1 3题

    三.用go语言,仿照图 10-2,画图表示依次执行操作 ENQUEUE(Q,4).ENQUEUE(Q,1).ENQUEUE(Q,3).DEQUEUE(Q).ENQUEUE(Q,8)和 DEQUEUE( ...

  3. C语言条件运算符(?:)

    条件运算符(conditional operator)有时候也称为三元运算符(ternary operator,或者trinary operator),因为它是唯一需要 3 个操作数的运算符: 条件 ...

  4. 【Dotnet 工具箱】基于 .NET 6 和 Angular 构建项目任务管理平台

    1.Reha 时间管理大师 Rhea 是一个基于 C# 和 .NET 6 开发的在线任务管理平台,类似于 禅道.Jira.Redmine, 滴答清单等. 支持多视图多维度统一管理任务.多级结构,工作区 ...

  5. Vue之阻止默认行为

    1.使用原生js实现点击右键阻止默认行为 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  6. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-22-处理select下拉框-上篇

    1.简介 在实际自动化测试过程中,我们也避免不了会遇到下拉框选择的测试,因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助.今天,我们讲下playwright的下拉框怎 ...

  7. 打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态

    从今年8月起,所有升级到HarmonyOS 4的手机用户在美团外卖下单后,可通过屏幕上的一个"小窗口",随时追踪到"出餐.取餐.送达"等订单状态.这个能让用户实 ...

  8. STM32 定时器时钟配置技巧

    众所周知 STM32 的时钟配置比较复杂,而定时器的时钟配置更是 '奇葩'. 如下图(截图自STM32F4编程手册)APB的预分频器分频系数如果不为1,则定时器的时钟就倍频了反而. 配置技巧 下面以S ...

  9. VUE首屏加载优化 性能优化分析插件安装分享

    优化背景: 项目上线后 第一次进入项目要等待接近50s才能进入页面.一开始觉得是电脑配置问题或者网络问题.F12后发现加载资源过慢 其中一个chunk-***js文件有10m 加载了45s .我们使用 ...

  10. Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?

    引言 在前面的讲解中,我们已经提及了微服务的一些弊端,并介绍了Istio这样的解决方案.那么,对于我们开发人员来说,Istio究竟会带来哪些变革呢?今天我们就来简要探讨一下! Kubernetes简单 ...