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

图片

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-ymlnamespace: test
spec:containers:- image: daocloud.io/library/nginx:1.9.1name: 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: testname: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: daocloud.io/library/nginx:1.9.1ports:- 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: testname: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: daocloud.io/library/nginx:1.9.1ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:namespace: test#注意:这里要和Deployment的名称一致name: nginx-deploymentlabels:app: nginx-deployment
spec:selector:#注意:这里要和Deployment的app名称一致app: nginxports:#Service的端口- port: 8888#容器内的端口targetPort: 80type: 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: testname: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: daocloud.io/library/nginx:1.9.1ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:namespace: test#注意:这里要和Deployment的名称一致name: nginx-deploymentlabels:app: nginx-deployment
spec:selector:#注意:这里要和Deployment的app名称一致app: nginxports:#Service的端口- port: 8888#容器内的端口targetPort: 80type: NodePort
---
#apiVersion值必须写成networking.k8s.io/v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:namespace: testname: nginx-ingress
spec:ingressClassName: ingressrules:#映射的域名- host: abc.def.comhttp:paths:#访问什么样的路径- path: /#匹配方式,前缀匹配,即匹配上path配置的斜杠就可以pathType: Prefixbackend:#自定用哪个serviceservice:name: nginx-deploymentport:#映射的端口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.mzph.cn/news/600149.shtml

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

相关文章

C语言编译器(C语言编程软件)完全攻略(第二十二部分:Code::Blocks使用教程(使用Code::Blocks编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 二十二、Code::Blocks使用教程&#xff08;使用Code::Blocks编写C语言程序&#xff09; 前面我们给出了一段完整的 C 语言代码&#xff0c;就是在显示器上输出 “C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio…

04set注入专题/简单类型/数组/List/Set/Map/空字符串/null/特殊符号

1.1注入外部Bean 在之前使用的案例就是注入外部Bean的方式。 <!-- class属性声明要管理哪个类中的对象 property标签的name是提示set方法名ref标签指明注入的bean的id--><bean id"userServiceBean" class"com.powernode.spring6.service.UserService…

【信息论与编码】习题-单选题

目录 单选题1.下列说法正确的是&#xff08;B&#xff09;2.在信息论中&#xff0c;若用对数底2为&#xff0c;则信息量的单位为&#xff08;C&#xff09;3.率失真函数的下限为&#xff08;A&#xff09;4.给定xi条件下随机事件yj所包含的不确定度和条件自信息量p(yj /xi)。&a…

大数据平台数据治理与建设方案:PPT全文90页,附下载

关键词&#xff1a;数据治理&#xff0c;大数据&#xff0c;数据治理平台&#xff0c;数据治理顶层设计&#xff0c;大数据治理&#xff0c;数据治理建设 一、数据治理建设需求分析 1、业务需求和目标&#xff1a;首先&#xff0c;明确业务需求和目标是非常重要的。数据治理项…

VMware Tools 启动脚本未能在虚拟机中成功运行。如果您在此虚拟机中配置了自定义启动脚本,请确保该脚本没有错误。您也可以提交支持请求,报告此问题。

问题描述&#xff1a;今天打开centos7虚拟机就是直接打不开了报了下面的错误&#xff0c;也没有动任何东西&#xff0c;点确定后&#xff0c;也是依然没有反应 问题原因&#xff1a;可能是虚拟机中的内存满了&#xff0c;需要清理内存 解决方法如下 首先cmd打开终端敲入如下命…

Weblogic安全漫谈(四)

黑名单机制必然会推动两种研究方向的发展&#xff1a;一是挖掘不在黑名单的新组件&#xff0c;是为绕过规则&#xff1b;二是发掘检查的盲区&#xff0c;是为绕过逻辑。 CVE-2020-14756 二次反序列化具有对抗检查逻辑的天生丽质&#xff0c;在CVE-2018-2893中就有利用字节数组…

创新性文生视频模型,南洋理工开源FreeInit

文本领域的ChatGPT&#xff0c;画图领域的Midjourney都展现出了大模型强大的一面&#xff0c;虽然视频领域有Gen-2这样的领导者&#xff0c;但现有的视频扩散模型在生成的效果中仍然存在时间一致性不足和不自然的动态效果。 南洋理工大学S实验室的研究人员发现&#xff0c;扩散…

热图分析(这个热力图代表的是不同描述符与pIC50之间的皮尔逊相关系数。)

案例一&#xff1a; 这个热力图代表的是不同描述符与pIC50之间的皮尔逊相关系数。pIC50是一种表示化合物在生物学测定中抑制效果的负对数IC50值&#xff0c;它通常用于药物发现和评估中&#xff0c;用来量化化合物对特定靶标的抑制能力。 要分析这个热力图&#xff0c;你需要关…

Syntax Error: Error: Cannot find module ‘imagemin-optipng‘

一、背景&#xff1a; 心酸&#xff0c;很难受&#xff1b;本人主要做后端开发&#xff0c;这几天要打包前端项目 遇到了这个报错 Syntax Error: Error: Cannot find module imagemin-optipng 搞了3天时间才打包成功&#xff0c;使用了各种姿势才搞定。期间百度了各种方案都…

Java学习苦旅(十八)——详解Java中的二叉树

本篇博客将详细讲解二叉树 文章目录 树型结构简介基本概念表示形式 二叉树概念两种特殊的二叉树二叉树的性质二叉树的存储二叉树的简单创建二叉树的遍历前中后序遍历层序遍历 结尾 树型结构 简介 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09…

【方法】PPT设置密码后如何修改?

PowerPoint是我们日常和工作中经常用到的办公软件&#xff0c;有时候为了保护文件&#xff0c;还会设置密码&#xff0c;那设置密码后又想要修改密码&#xff0c;怎么操作呢&#xff1f;下面来看看PPT常用的两种密码是如何修改的。 1. “打开密码” 想要修改PPT的“打开密码”…

NX二次开发中如何从对象选择控件中获得选中面的TAG值

一、概述 在NX二次开发中所有的对象操作都是通过对对象的TAG值进行操作控制&#xff0c;如何结合BlockUI控件&#xff0c;得到对象的TAG值是十分重要的一步。今天就遇到了这个问题&#xff0c;其实不是不会&#xff0c;而是思维习惯&#xff0c;直接利用对象选择器->Tag()&a…

leetcode:3. 无重复字符的最长子串

一、题目 二、函数原型 int lengthOfLongestSubstring(char* s) 三、思路 本题就是找最长的无重复字符子串。 两层循环&#xff0c;外层循环控制字串的起始位置&#xff0c;内层循环控制字串的长度。 设置一个长度为256且初始为0的hash表&#xff08;因为一共有256个字符…

安卓拍照扫描APP解决方案——基于深度学习的文本方向检测与校正

简介 在OCR&#xff08;光学字符识别&#xff09;系统中&#xff0c;为了提高OCR系统的性能&#xff0c;确保准确识别文本内容。图像预处理是一个关键的组成部分。其中&#xff0c;一个重要的任务是矫正文本方向。例如&#xff0c;在进行文字识别时&#xff0c;不仅需要有效地…

数据结构和算法-插入排序(算法效率 折半优化 顺序表与链表插入排序 代码实现)

文章目录 插入排序算法实现算法效率分析优化-折半插入排序代码实现对链表进行插入排序小结 插入排序 首先49当作第一个已经排好序得元素&#xff0c;将第二个元素与前面得元素对比&#xff0c;发现小于49&#xff0c;于是49移动位置 此时将65与之前元素对比&#xff0c;发现其…

【KingbaseES】实现MySql函数TEXT_EQUAL

TEXT_EQUAL CREATE OR REPLACE FUNCTION text_equal_ci(text_value1 text, text_value2 text) RETURNS boolean AS $$ BEGIN RETURN (lower(text_value1) lower(text_value2)); END; $$ LANGUAGE plpgsql IMMUTABLE;

苦学golang半年,写了一款web服务器

苦学golang半年&#xff0c;写了一款web服务器 文章目录 苦学golang半年&#xff0c;写了一款web服务器example 项目地址&#xff1a;https://github.com/fengyuan-liang/jet-web-fasthttp 苦学golang半年&#xff0c;写了一款web服务器&#xff0c;里面包含笔者各种工程实践&a…

深度学习中的准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的AUC值,

混淆矩阵 其中关于 TP, TN; FP, FN 的解释&#xff1b; 其中首字母 T&#xff0c;F代表预测的情况&#xff0c;即T代表预测的结果是对的&#xff0c; F代表预测的结果是错误的&#xff1b; 第二个字母代表预测是预测为 正样本&#xff0c;还是负样本&#xff0c; Positve 代表…

第11章 GUI Page462~476 步骤二十三 步骤二十四 Undo/Redo ②“添加操作”支持“Undo/Redo”

工程二 1.为AddAction类添加Undo() Redo() GetName()成员函数 2.实现AddAction类的Undo() Redo()函数 3.运行效果&#xff0c;但是日志窗口没有记录 原因&#xff1a;AddAction(EditAction* newAction)函数没有实现&#xff0c;另外参数是EditAction类型 所以我们还需要在基…

线性代数 --- 为什么LU分解中的下三角矩阵L的主对角线上都是1?

为什么LU分解中的下三角矩阵L的主对角线上都是1? 一方面&#xff0c;对于LU分解而言&#xff0c;下三角阵L是对高斯消元过程的记录&#xff0c;是高斯消元的逆过程&#xff0c;是多个消元矩阵E的逆矩阵的乘积(形如下图中的下三角矩阵)&#xff0c;即&#xff1a; 另一方面&…