DevOps搭建(十五)-kubernetes部署项目详细步骤

news2024/11/27 21:04:30

图片

1、k8s简介

k8s官网地址

https://kubernetes.io/zh-cn/docs/home/

图片

2、安装kuboard

详细步骤可参考官网

https://kuboard.cn/install/install-k8s.html

2.1、环境准备

至少 2 台 2核4G 的服务器。

选择v1.19,因为高版本的已经把docker给舍弃掉了。

https://kuboard.cn/install/history-k8s/install-k8s-1.19.x.html

2.2、修改 hostname

主机执行

# 修改 hostname
hostnamectl set-hostname k8master
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1   $(hostname)" >> /etc/hosts

从机执行

# 修改 hostname
hostnamectl set-hostname k8sworker
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1   $(hostname)" >> /etc/hosts

2.3、安装docker及kubelet

主机和从机都要执行

# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.19.5 用于指定 kubenetes 版本,支持所有 1.19.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
# export REGISTRY_MIRROR="http://f1361db2.m.daocloud.io"
# 华为云镜像
# export REGISTRY_MIRROR="https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"
# 阿里云 docker hub 镜像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.5

2.4、初始化 master 节点

2.4.1、执行初始化脚本

注意只在master节点中执行

# 只在 master 节点执行
# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=192.168.88.126
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.5

2.4.2、检查 master 初始化结果

执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态

# 只在 master 节点执行

# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide

图片

查看 master 节点初始化结果

# 查看 master 节点初始化结果
kubectl get nodes -o wide

图片

2.5、初始化 worker节点

2.5.1、获得 join命令参数

在 master 节点上执行

# 只在 master 节点执行
kubeadm token create --print-join-command

可获取kubeadm join 命令及参数,如下所示

kubeadm join apiserver.demo:6443 --token grrmtv.3dr3rm4vpqr76y9o     --discovery-token-ca-cert-hash sha256:5d9753dfa125ea514cbc66d31151eff395ac4364fd91675ad0460a9d6795f606

2.5.2、初始化worker

针对所有的 worker 节点执行

# 只在 worker 节点执行
# 替换 x.x.x.x 为 master 节点的内网 IP
export MASTER_IP=192.168.88.126
# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts

# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token grrmtv.3dr3rm4vpqr76y9o     --discovery-token-ca-cert-hash sha256:5d9753dfa125ea514cbc66d31151eff395ac4364fd91675ad0460a9d6795f606

图片

2.5.3、检查初始化结果

只在 master 节点执行

# 只在 master 节点执行
kubectl get nodes -o wide

输出结果如下所示:

图片

3、安装kuboard图形化管理工具

官方详细步骤地址:

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

3.1、执行 Kuboard v3 在 K8S 中的安装

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

3.2、等待 Kuboard v3 就绪

在master节点上执行以下指令,等待 kuboard 名称空间中所有的 Pod 就绪,如下所示

watch kubectl get pods -n kuboard

图片

3.3、访问 Kuboard

http://192.168.88.126:30080/

输入初始用户名和密码,并登录

用户名: admin

密码: Kuboard123

图片

4、基本操作

4.1、Namespace操作

命名空间是为了隔离各个环境的,比如开发环境叫dev,测试环境叫test等,执行以下语句就能创建一个命名空间

4.1.1、创建命名空间

方式一
kubectl create ns test
方式二

此外还可以通过yml的方式创建,如先创建一个namespace-test.yml,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: test
kubectl apply -f namespace-test.yml

4.1.2、删除命名空间

kubectl delete ns test

4.1.3、查看所有命名空间

kubectl get ns

4.2、Pod操作

4.2.1、查看pod

查看所有的pod

注意:最后要加上 -A,如果不加,默认查询default命名空间下的pod

kubectl get pods -A

查看指定命名空间的pod

kubectl get pods -n test

4.2.2、运行一个pod

方式一
kubectl run nginx --image=nginx:latest

也可以指定具体的镜像名和命名空间,

例如我们可以到一个国内的镜像站:https://hub.daocloud.io/

下找到nginx对应具体镜像daocloud.io/library/nginx:1.9.1版本进行安装,并指定安装到test命名空间下。

kubectl run nginx --image=daocloud.io/library/nginx:1.9.1 -n test
方式二

此外还可以通过yml的方式创建,如先创建一个pod-test.yml,内容如下,其中containers下可以有多个镜像信息,也就是说一个pod里可以部署多个docker容器:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-yml
  namespace: test
spec:
  containers:
  - image: daocloud.io/library/nginx:1.9.1
    name: nginx-yml
kubectl apply -f pod-test.yml

查看pod详情可以知道pod内部的ip

kubectl describe pod nginx -n test

得到ip,发现这个ip其实是在步骤2.4.1中POD_SUBNET设定的ip范围。

接着我们可以直接curl 10.100.162.196可看到nginx响应相关信息,但是现在还无法通过外部访问。

图片

4.2.3、查看pod的详细信息

以下命令是查看test命名空间下的nginx的pod信息。

kubectl describe pod nginx -n test

4.2.4、进入pod的容器中查看日志

pod里运行的其实是docker容器,通过以下命令查看容器日志:

kubectl logs -f nginx -n test

4.2.5、进入pod中的容器中

kubectl exec -it nginx -n test -- bash

4.2.4、删除pod

以下命令就是把default命名空间下的nginx这个pod删除掉

kubectl delete pod nginx -n default

4.3、图形化界面操作Pod

点击默认集群

图片

如下图,找到对应的命名空间:

图片

在进入容器组中,能看到容器的信息:

图片

4.4、Deployment操作

4.4.1、创建一个deployment

方式一
kubectl create deployment deploy-nginx -n test --image=daocloud.io/library/nginx:1.9.1
方式二

通过yml的方式创建管理,更推荐使用这种方式,更方便管理运行。

我们可以到官网摘抄下:

https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/

首先创建一个deployment-nginx.yml文件

vi deployment-nginx.yml

内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: daocloud.io/library/nginx:1.9.1
        ports:
        - containerPort: 80

最后运行以下脚本

kubectl apply -f deployment-nginx.yml

4.4.2、查看deployment

kubectl get deploy -n test

4.4.2、删除deployment

kubectl delete deployment deploy-nginx

4.5、图形化界面操作Deployment

4.5.1、查看容器组

在新增一个deployment后,会默认创建一个pod,我们可以到图形化界面看到

图片

到工作负载里能看到deployment:

图片

4.5.2、查看工作负载

进到详情里能看到各种操作按钮

图片

4.5.3、自动伸缩pod

如下操作,可快速的伸缩指定deployment下的pod数量:

图片

再到容器组里看到多了一个pod

图片

4.6、Service操作

4.6.1、创建Service

4.6.1.1、暴露Deployment生成

要想访问deployment,首先我们需要暴露个端口

kubectl expose deployment nginx-deployment --port=8888 --target-port=80 -n test

上面脚本的意思是:将命名空间test里deployment为nginx-deployment对外暴露端口,端口为888,映射到pod容器里的nginx端口80。

上面方式只能在服务器内部访问,在浏览器是无法访问的,如果想外部也能访问,需要加type=NodePort参数:

kubectl expose deployment nginx-deployment --port=8888 --target-port=80 -n test --type=NodePort

暴露了之后,生成对应的service

kubectl get service -n test

图片

图形化界面也能看到

图片

4.6.1.2、通过yml文件创建

创建一个yml文件

vi deployment-service.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: daocloud.io/library/nginx:1.9.1
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  namespace: test
  #注意:这里要和Deployment的名称一致
  name: nginx-deployment
  labels:
    app: nginx-deployment
spec:
  selector:
    #注意:这里要和Deployment的app名称一致
    app: nginx
  ports:
  #Service的端口
  - port: 8888
    #容器内的端口
    targetPort: 80
  type: NodePort

执行yml文件

kubectl apply -f deployment-service.yml

执行后可以在图形化界面看到服务了

图片

4.6.2、查看Service

kubectl get service -n test

图片

可以看到Service的ip和端口,请求ip:port,返回nginx信息

curl http://10.96.68.96:8888/

图片

浏览器通过主机ip+外部端口访问:

http://192.168.88.126:30833/

图片

4.7、Ingress操作

4.7.1、安装Ingress

如下图,在集群管理->IngressClass菜单进入安装页面

图片

点击安装弹出如下界面,选择使用私有镜像仓库,点击确定按钮

图片

安装完之后,容器组进入 Succeeded 或 Running 状态之后,IngressNginxController 就可以正常工作。

图片

4.7.2、通过yml创建Ingress

在4.6.1.2步骤中的yml文件追加ingress脚本

vi deployment-nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: daocloud.io/library/nginx:1.9.1
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  namespace: test
  #注意:这里要和Deployment的名称一致
  name: nginx-deployment
  labels:
    app: nginx-deployment
spec:
  selector:
    #注意:这里要和Deployment的app名称一致
    app: nginx
  ports:
  #Service的端口
  - port: 8888
    #容器内的端口
    targetPort: 80
  type: NodePort
---
#apiVersion值必须写成networking.k8s.io/v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: test
  name: nginx-ingress
spec:
  ingressClassName: ingress
  rules:
  #映射的域名
  - host: abc.def.com
    http:
      paths:
      #访问什么样的路径
      - path: /
        #匹配方式,前缀匹配,即匹配上path配置的斜杠就可以
        pathType: Prefix
        backend:
        #自定用哪个service
          service:
            name: nginx-deployment
            port:
              #映射的端口
              number: 8888

执行脚本

kubectl apply -f deployment-nginx.yml

图片

4.7.3、配置域名访问

C:\Windows\System32\drivers\etc

192.168.88.126 abc.def.com

图片

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1365643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

selenium如何使用隧道代理请求目标地址?

使用Selenium结合隧道代理IP可以通过以下步骤实现: 获取代理IP: 首先,你需要获得一个可用的隧道代理IP。你可以使用代理服务提供商(巨量IP平台提供免费隧道代理测试) 安装Selenium: 如果你还没有安装Selen…

redis报错:Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

Redis启动时报错: Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 这个错误说明已经开启了redis,并且已经占用了端口6379,需要停止redis后再开启。 redis-cli.exeshutdownexitredis-server redis.windows.conf 参考…

BurpSuite信息收集篇

BurpSuite信息收集篇 1.填充目标站点地图2.使用 Burp Suite 自动发现内容3.使用 Burp Suite 枚举子域1.填充目标站点地图 演示站点 ginandjuice.shop 1、抓取目标的请求包 2、在不关闭浏览器的情况下,转到目标>站点地图。请注意,已自动添加一个节点来表示目标域 3、右键…

react-native生命周期函数

生命周期函数 实例化阶段(图中上框部分),存在阶段(图中左框部分),销毁阶段(图中右框部分) 实例化阶段 开发中,常用的就是实例化阶段,因为该阶段是组件的构建&…

不同像平面坐标系下的Brown畸变系数互转

不同像平面坐标系下Brown畸变系数转换 记 u , v u,v u,v为像素为单位的坐标,f为焦距,单位也是像素。 记 x , y x,y x,y为理想坐标。本文推导两种情况下的Brown畸变系数转换关系: 相同坐标系定义、不同的坐标单位(像素坐标与归一…

QT如何修改项目名称

#打开项目 这里以项目start1为例 修改start1为hds 首先删除这个文件 之后打开CmakeLists.txt文件修改里面的项目名称把里面含有start1的全部写成hds。一般是3个地方 重新打开hds文件 configure Project一下 可以看到跑出来是一样的。到此项目的名称就改过来了。

element plus 表格组件怎样在表格中显示图片

官方给的&#xff1a; <el-table-column label"Thumbnail" width"180"><template #default"scope"><div style"display: flex; align-items: center"><el-image :preview-src-list"srcList"/><…

搭建Github Page完全手册

一、前期准备 注册Github账号&#xff08;必备&#xff09;下载GitHub Desktop&#xff1a;下载链接&#xff08;可使用git代替&#xff09;模板选择网站&#xff1a; jekyllthemes.orggohugomademistakes 二、快速入门 1.模板参考 作者使用的模板来源&#xff1a;https://…

灌区信息化方案(什么是现代化灌区,如何一步到位)

一、系统概述 详情&#xff1a;https://www.key-iot.com.cn/ 本灌区信息化方案以星创易联公司的各类智能设备为基础,通过其产品完成水文、雨情、土壤等多源异构数据的采集,以无线自组网的方式实现数据传输,并在后台管理中心建立信息化软件平台,对数据进行融合处理。系统实现对…

MYSQL双主节点–更换ip

MYSQL双主节点–更换ip 一、更换双主节点ip 1.停止mysql服务 #安装了supervisor supervisorctl stop mysql #未安装 systemctl stop mysqld2.修改网卡配置信息 注&#xff1a;ens33是网卡名称&#xff0c;可能网卡不叫ens33 vi /etc/sysconfig/network-scripts/ifcfg-ens333…

小样本学习介绍(超详细)

小样本学习介绍 本文首先介绍了什么是小样本学习&#xff0c;其次介绍了为什么小样本学习的很多文章都采用元学习的方法。目的是通过通俗的解释更加清楚的介绍小样本学习是什么&#xff0c;适合初学者的入门。当然&#xff0c;以下更多的是自己的思考&#xff0c;欢迎交流。 …

频率域滤波图像复原的python实现——数字图像处理

原理 维纳滤波的原理是基于统计方法&#xff0c;旨在通过最小化信号的估计误差来改善信号的质量。它在处理具有噪声干扰的信号时特别有效。维纳滤波旨在从受噪声干扰的信号中恢复原始信号。它假设信号和噪声都是随机过程&#xff0c;并且它们的统计特性是已知的或可估计的。维…

面试算法99:最小路径之和

题目 在一个mn&#xff08;m、n均大于0&#xff09;的格子中&#xff0c;每个位置都有一个数字。一个机器人每步只能向下或向右&#xff0c;请计算它从格子的左上角到达右下角的路径的数字之和的最小值。例如&#xff0c;从图14.8中33的格子的左上角到达右下角的路径的数字之和…

vue-springboot 音乐推荐系统 带歌词的音乐播放器系统设计与实现 7902c

少数民族音乐网站在流畅性&#xff0c;续航能力&#xff0c;等方方面面都有着很大的优势。这就意味着少数民族音乐网站的设计可以比其他系统更为出色的能力&#xff0c;可以更高效的完成最新的音乐信息、音乐资讯、在线交流等功能。 此系统设计主要采用的是JAVA语言来进行开发&…

有趣的前端知识(一)

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读HTML简介基础声明HTML标签标题段落注释水平线文本格式化标签超链接图像<i…

C#开源的一款友好的.NET SDK管理器

前言 今天推荐一款由C#开源的、友好的.NET SDK管理器&#xff1a;Dots。 工具介绍 Dots 是一款 .NET SDK 管理器&#xff0c;可让您轻松安装、卸载和切换 .NET SDK。它是一款跨平台工具&#xff0c;可在 Windows 和 macOS 上运行&#xff0c;即将支持 Linux。它由 C# 编写&a…

机器学习周报第27周

目录 摘要Abstract一、文献阅读 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff09;、LSTM以及GRU。在数据集方面除了使用现实的时间序列数据外&#xff0c;还通…

区块链与元宇宙电商:重塑商业生态革命

小编介绍&#xff1a;10年专注商业模式设计及软件开发&#xff0c;擅长企业生态商业模式&#xff0c;商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地&#xff1b;扶持10余个电商平台做到营收过千万&#xff0c;数百个平台达到百万会员&#xff0c;欢迎咨询。 在当…

ICMP隐蔽隧道工具Pingtunnel搭建隧道(附搭建环境避坑超详细)

工具介绍可参考其他博主文章&#xff0c;这里直接上环境搭建和踩坑避坑后的工具攻击过程。 目录 环境搭建 #安装libpcap的依赖环境 打通隧道&#xff08;linux服务端开启监听&#xff09; 连接测试&#xff08;kali攻击机上启动&#xff09; 远控攻击&#xff08;win7&…

CSS案例:flex、justify-content、align-items

黑马程序员JS学习时的一个案例&#xff0c;CSS有点不懂&#xff0c;单拎出来分析。 具体出处是某站视频中的数组篇讲解&#xff0c;&#xff08;点击链接跳转&#xff09; CSS案例 效果&代码1. 先分析最大的boxflex布局 justify-contentalign-items以 flex-end 为例 2. box…