哈工大 面向服务的软件系统(2022秋季学期)lab 3

文章目录

    • 前言
    • 使用到的各种软件的版本
      • VMware Workstation
      • CentOS 7
      • Docker
      • k8s
    • 实验流程
      • 虚拟机的下载安装
      • 使用xshell连接虚拟机
      • 修改hostname
      • 安装Docker(所有节点都要安装)(参考[CentOS搭建K8S环境教程](https://cloud.tencent.com/developer/article/1709491)即可)
      • 配置k8s环境(所有节点都要配置)
      • 安装k8s(所有节点)
      • 初始化Master节点(只在Master上)
      • 从节点加入集群
      • Docker镜像打包,上传(Master节点)
      • 部署到Kubernetes中

前言

我在做实验的时候还没有火炬,而且实验指导书过于粗糙(并且有的指令是错误的),在经历了相当痛苦的一段时间才将这个实验完成。于是就想将这里实验过程记录下来,让学弟学妹少走一些弯路。这份文档主要记录了我做实验的过程以及中间遇到的问题及解决办法。

本次实验建议使用CentOS 7,不建议使用Ubuntu。实验指导书上的教程是在CentOS下的教程,部署k8s时CentOS和Ubuntu有一些区别。刚开始大家都选择在比较熟悉的Ubuntu下做实验,但是很快便都换成了CentOS。所以,别浪费时间,直接用CentOS做吧。

我是使用两台虚拟机部署的网络,根据我多次推倒重做的经验,使用虚拟机和使用老师提供的服务器会遇到不一样的错误。如果要参考我的实验流程,建议使用虚拟机,同时虚拟机和k8s、docker就和我用一样的版本,不然可能会遇到各种各样的问题。此外要注意的是,CentOS 6和CentOS 7在一些指令上并不相同,如果实验过程中遇到问题上网找解决办法时注意网上给的是CentOS 6下的指令还是CentOS 7下的指令

本文主要参考了实验指导书以及CentOS搭建K8S环境教程

使用到的各种软件的版本

VMware Workstation

在这里插入图片描述

CentOS 7

在网站阿里云镜像链接下选择CentOS-7-x86_64-DVD-2009.iso即可

在这里插入图片描述

Docker

18.09.9

k8s

1.17.3

实验流程

虚拟机的下载安装

因为需要一个主节点和一个从节点,所以需要安装两台虚拟机,两台虚拟机均按照相同的办法安装即可。

iso文件并不需要下载两个,两个虚拟机可以使用同一个iso文件

在上文的链接中下载好虚拟机之后,可以按照如下流程进行安装。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里选择虚拟机的名称以及存储位置

在这里插入图片描述

这里我没记错的话,选择1*1的处理器配置k8s将无法正常工作,我选择的是2*2的

在这里插入图片描述

我在这里给每一台机器分配了4096MB的空间

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我在这里选择了默认的大小20GB

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击如下位置的浏览选择自己下载的iso文件

在这里插入图片描述

之后点击完成即可。

之后点击开启虚拟机,用键盘选择Install CentOS7之后按enter即可

在这里插入图片描述

在页面内输入chinese选择中文,点击继续

在这里插入图片描述

可以选择“软件安装”安装其他软件包,例如安装GNome桌面,最小安装的有点是体积小安装快,但是他只能通过命令行操作。同时这个软件包不带有vim,实验过程中遇到vim指令时需要将vim换成vi

配置磁盘,进去之后点左上角的完成即可。

在这里插入图片描述

在这里插入图片描述

点击这里可以设置root密码,也就是以root模式运行时的密码。

在这里插入图片描述

之后点击重启即可

在这里插入图片描述

重启之后可以看到下面的画面,login的位置输入root即可,password即为上面设置过的密码。这样虚拟机就安装好了,这是一个只有命令行模式的虚拟机

在这里插入图片描述

使用xshell连接虚拟机

直接在虚拟机上进行实验不如使用xshell方便,可以参考下面的文章使用xshell连接虚拟机

shell连接本地虚拟机centos_kong___的博客-CSDN博客

修改hostname

虚拟机上hostname的值是默认的,这样在查看k8s的节点状态时将无法区分不同的节点,所以我们更改hostname。最好早一点更改hostname,配置好k8s之后再更改hostname会比较麻烦,还会有其他问题。

直接使用如下指令更改hostname即可

hostnamectl set-hostname name

安装Docker(所有节点都要安装)(参考CentOS搭建K8S环境教程即可)

# 安装docker所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里云的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 指定安装这个版本的docker-ce
yum install -y docker-ce-18.09.9-3.el7
# 启动docker
systemctl enable docker && systemctl start docker

配置k8s环境(所有节点都要配置)

# 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld# 关闭selinux
# 临时禁用selinux
setenforce 0
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config# 禁用交换分区
swapoff -a
# 永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab# 修改内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system# 安装 Kubernetes 和 docker
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装k8s(所有节点)

实验指导书上的指令安装的是最新的k8s,但是最好选择1.23以及以下的k8s版本,否则会存在版本兼容问题,这里选择1.17.3

yum install -y kubectl-1.17.3-0 kubeadm-1.17.3-0 kubelet-1.17.3-0
systemctl enable kubelet && systemctl start kubelet
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --systemmkdir -p /etc/cni/net.d

初始化Master节点(只在Master上)

实验指导书上的指令为

kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.17.3
--apiserver-advertise-address=192.168.56.101

注意在kubernetes-version字段规定了k8s的版本,我们需要将其改成刚刚安装的版本,在这里也就是1.17.3。同时将apiserver-advertise-address中的内容改成Master节点的IP地址。这里,我执行的指令如下所示,在指令中规定了使用阿里云的镜像,可以加快速度。--token-ttl 0可以让我们生成的集群密钥变成永久密钥,否则其有效期默认只有一天

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.17.3 --apiserver-advertise-address 192.168.179.132 --pod-network-cidr=192.168.0.0/16 --token-ttl 0

init成功之后我们可以得到如下指令

在这里插入图片描述

在Master节点中使用第一段指令

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

从节点加入集群时可以使用第二段指令

kubeadm join 192.168.179.132:6443 --token y8r2c0.7vhn3111ewy9vav0 \--discovery-token-ca-cert-hash sha256:106ac3177ff1cc2532902677a798e1430406b841c3fa1d48f1247bdd8e7f61ce

从节点加入集群

在从节点中使用上面的join指令,在从节点中使用指令kubectl get nodes,如下提示:

The connection to the server localhost:8080 was refused - did you specify the right host or port?

按照文章https://blog.csdn.net/tearofthemyth/article/details/113146166中的方法可以解决问题,注意如果没有配置IP映射的话需要将下面的master换成主节点的IP地址

在这里插入图片描述

之后在主节点或者从节点执行kubectl get nodes,均可以看到下面的提示信息

在这里插入图片描述

在主节点和从节点中均使用kube-flannel.yml(已修改镜像下载数据源)中的方法(和指导书上的指令kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml是一个道理,有人用指导书上的指令一遍就跑通了,但是我这里不行,所以我使用了其他办法。使用上面文章中的方法可以解决一部分问题,但是其他地方仍然存在错误,所以之后可以看到节点状态仍然是NotReady),之后看到节点状态仍然是NotReady。使用指令kubectl get pods -n kube-system定位是哪个组件出现了问题,可以看到是这两个

在这里插入图片描述

使用kubectl describe pod coredns-9d85f5447-22qn2查看详细信息

在文章https://blog.csdn.net/baidu_38803985/article/details/105966464中看到可能是因为没有本地IP解析,所以尝试在/etc/hosts更改本地IP解析,添加如下的两行即可,注意hostname要换成自己的,使用hostname指令可以直接查看虚拟机的的hostname

在这里插入图片描述

在主从节点均设置完之后那两个pod仍然是pending状态。

之后使用如下指令查看日志

journalctl -f -u kubelet.service

可以看到如下错误信息

在这里插入图片描述

根据文章https://blog.csdn.net/qq_29385297/article/details/127682552中的方法可以解决问题,主节点和从节点都要进行这一步操作

之后查看node的状态,可以看到全部转变为ready了

在这里插入图片描述

Docker镜像打包,上传(Master节点)

按照指导书上的指示,创建一个文件夹hello_kube并且添加下面两个文件。

server.js:

var http = require('http');
console.log('Heeeee');
var handleRequest = function(request, response) {console.log('Received request for URL: ' + request.url);response.writeHead(200);response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
console.log('Listening')

Dockerfile:

FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js

接下来执行指令

docker build -t hello_world:v2 . #(别忘了这里有个点)

使用 docker images可以查看镜像

在这里插入图片描述

同时按照指导书上的办法进行注册和push,这里由于我之前已经push过了便不再演示,如果失败的话极有可能是因为网络问题,我在服务器上进行实验的时候push很快就完成了,但是在虚拟机上变得特别慢,不知道是因为什么原因。注意要将下面的USERNAME换成自己的用户名,同时只能是小写,就算注册时使用了大写这里也要改成小写,我没有记错的话这里也不能使用邮箱,只能用用户名

在这里插入图片描述

部署到Kubernetes中

按照实验指导书,在 master 节点上,新建文件:注意将 image 修改为自己刚刚上传的

这里有一个很坑的地方,yaml文件的缩进只能使用空格不能使用tab。并且yaml文件是根据缩进的格数来确定各个属性的,所以对缩进有着很严格的要求,但是如果直接从pdf上直接复制粘贴文件内容,文本将会失去之前的格式,建议直接用下面的配置文件即可,我已经调整好了格式,别忘了将image修改为自己刚刚上传的USERNAME/hello_world:v2

apiVersion: v1
kind: Service
metadata:name: hello-world
spec:type: NodePortports:- port: 80targetPort: 8080nodePort: 31611selector:app: hello-world
---
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-world
spec:replicas: 3selector:matchLabels:app: hello-worldtemplate:metadata:labels:app: hello-worldspec:containers:- name: hello-worldimage: USERNAME/hello_world:v2ports:- containerPort: 8080

之后执行指令

kubectl create -f ./hello_world.yaml

使用kubectl get pods查看pod情况

在这里插入图片描述

发现pod处于ContainerCreating状态,使用kubectl describe pod hello-world-7fc4b95f8f-dtm4z指令查看具体状态

在这里插入图片描述

k8s中默认Master节点是不工作,只负责管理调动。我们刚刚在Master节点中完成的push和部署的,然而工作任务实际上要在从节点上执行,也就是说目前从节点一直在尝试从Docker的库中拉取镜像,得到镜像之后才可以进行工作。但是镜像所在的服务器,也就是你刚刚push到的地方在国外,因为一些不能明说的原因,pull变得非常非常慢而且还经常失败。所以我想到,我直接从Master节点上传一份image到从节点不久可以了吗?

按照https://haicoder.net/docker/docker-save.html中的方法使用docker save将Master中的image打包,之后使用scp指令(scp的使用方法可以参考https://blog.csdn.net/orangefly0214/article/details/81635124)或者xftp将文件传输到从节点中,在从节点中使用docker load指令即可加载镜像(docker load指令可以参考docker常用命令-docker load)。之后使用kubectl get pods可以看到所有pod都正常运行。

在这里插入图片描述

可以在自己的Windows系统上直接访问192.168.179.133:31611,可以看到如下内容,如果是在服务器上完成的实验,可以使用wegt指令进行查看

在这里插入图片描述

之后在Master上使用指令kubectl scale Deployment hello-world --replicas=10进行扩容即可,这一步应该不会遇到什么问题。

在这里插入图片描述
到这里实验3就完成了

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

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

相关文章

chatgpt提问的艺术中英pdf,Openai CEO首推书籍!!哈工大官方报告,行业报告!...

AGI &#xff08;通用人工智能&#xff09;时代已来&#xff01;却不知道如何向chatGPT提问&#xff1f; 掌握恰当的提示&#xff08;prompts&#xff09;对开启 ChatGPT 很关键&#xff01; 《提问的艺术—让 ChatGPT导出高质量答案》是一本专门介绍如何通过向ChatGPT提问获取…

2023中国法律科技领域最具商业合作价值企业盘点

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 随着数据科学和人工智能的迅猛发展&#xff0c;众多行业都在积极探索如何将这些技术应用于实践中&#xff0c;以提升效率&#xff0c;优化流程&#xff0c;增强决策力。法律领域也不例外&#xff0c;数据智能已在法律行业中…

大模型LLM领域,有哪些可以作为学术研究方向?

清湛人工智能研究院 2023-05-31 09:23 发表于江苏 编者&#xff1a;本文转载了清华大学计算机系刘知远教授对大模型的一些思索&#xff0c;以飨读者。 刘知远 CCF 高级会员&#xff0c;CCCF 前编委。清华大学计算机系副教授、博士生导师。已在ACL、IJCAI、AAAI等人工智能领域…

刘知远教授:大模型LLM领域,有哪些可作为学术研究方向?

编辑&#xff1a;深度学习自然语言处理作者&#xff1a;刘知远 知乎&#xff1a;zibuyu9原文链接&#xff1a;https://www.zhihu.com/question/595298808/answer/3047369015 感觉有责任回答这个问题&#xff0c;恰好在高铁上写下回答。2022年初我做过一个报告题目是《大模型十问…

刘知远老师高铁上回应:大模型LLM领域,有哪些可以作为学术研究方向?

深度学习自然语言处理 分享作者&#xff1a;刘知远 感觉有责任回答这个问题&#xff0c;恰好在高铁上写下回答。2022年初我做过一个报告题目是《大模型十问》&#xff0c;分享我们认为大模型值得探索的十个问题。当时大模型还没这么火&#xff0c;而现在大模型已然妇孺皆知日新…

Lion:闭源大语言模型的对抗性蒸馏

通过调整 70k 指令跟踪数据&#xff0c;Lion (7B) 可以实现 ChatGPT 95% 的能力&#xff01; 消息 我们目前正在致力于训练更大尺寸的版本&#xff08;如果可行的话&#xff0c;13B、33B 和 65B&#xff09;。感谢您的耐心等待。 **[2023年6月10日]**我们发布了微调过程中解…

刘知远老师回应:大模型LLM领域,有哪些可以作为学术研究方向?

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号 第一时间获取价值内容 来源 | 深度学习自然语言处理 作者 | 刘致远 感觉有责任回答这个问题&#xff0c;恰好在高铁上写下回答。2022年初我做过一个报告题目是《大模型十问》&#xff0c;分享我们认为大模型值得探…

垂直领域大模型的一些思考及开源模型汇总

来自&#xff1a;NLP工作站 进NLP群—>加入NLP交流群 写在前面 大家好&#xff0c;我是刘聪NLP。 迄今为止&#xff0c;应该没有人还怀疑大模型的能力吧&#xff1f;但目前大模型实现真正落地&#xff0c;其实还有一段艰难的路要走。 对于ToC端来说&#xff0c;广大群众的口…

幂律智能联合智谱AI发布千亿参数级法律垂直大模型PowerLawGLM

前言 2023年是当之无愧的“大模型之年”&#xff0c;据瑞银集团的一份报告显示&#xff0c;ChatGPT推出仅仅两个月后&#xff0c;月活用户已经突破了1亿&#xff0c;成为史上用户增长速度最快的消费级应用程序。 在炙热的大模型赛道里&#xff0c;基于中文大模型的发布也是层…

三行代码调用大模型裁判PandaLM:保护隐私、可靠、可复现

©作者 | 王晋东 我们训练了一个专门用于评估大模型性能的裁判大模型&#xff1a;PandaLM&#xff0c;并提供了接口&#xff0c;仅需三行代码就可以调用PandaLM大模型进行保护隐私、可靠、可复现及廉价的大模型评估。 背景介绍 “赵老师&#xff0c;我们用不同基座和参数训…

让Ai帮你工作(4)--锁定图片生成角色

背景&#xff1a; Gpt4多模态模型上来后&#xff0c;MJ也是紧接着发布了V5&#xff0c;微软发布自己Ai作图工具&#xff0c;Abode、unity这些传统老牌作图软件工具也是紧跟着发布自己的AI作图插件工具。这已经标志着Ai作图已经成为计算成像的另一条生成链。 各大厂都已经发布了…

【LLM】大模型值得探索的十个研究方向

note 基础理论&#xff1a;大模型的基础理论是什么&#xff1f; 网络架构&#xff1a;Transformer是终极框架吗&#xff1f; 高效计算&#xff1a;如何使大模型更加高效&#xff1f; 高效适配&#xff1a;大模型如何适配到下游任务&#xff1f; 可控生成&#xff1a;如何实…

R语言 星相图和stars函数的用法

星相图是雷达图的多元表达形式&#xff0c;每个变量在图中都占据着一定的位置&#xff0c;想绘制一幅星相图&#xff0c;需要用到Rstudio中自带的graphic包得stars&#xff08;&#xff09;函数 其用法如下&#xff1a; stars(x,full TRUE,draw.segments FALSE,key.locc(xcoo…

r语言绘制星相图

星相图是雷达图的多元表达形式&#xff0c;每个变量在图中都占据着一定的位置&#xff0c;想绘制一幅星相图&#xff0c;需要用到Rstudio中自带的graphic包得stars&#xff08;&#xff09;函数 其用法如下&#xff1a; stars(x,full TRUE,draw.segments FALSE,key.locc(xcoo…

r语言中将茎叶图旋转90度_R语言(02)绘图

基本图形的绘制 在R语言(01)中&#xff0c;最后的一个综合训练&#xff0c;我们生成了一部分数据&#xff0c;现在我们就用这些数据为例&#xff0c;来展示R是如何绘制一些图表的。 数据的导入 通过读取数据文件&#xff0c;我们可以导入之前产生的数据。 1 2 3 4 5 6 7 8 9 10…

R语言小总结(基础篇)

&#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;一起来干R语言&#xff0c;冲冲冲&#xff01;&#xff01;&#xff01; &#x1f917;&#x1f917;&#x1f917;欢迎大佬们来指点指点鸭~~~ 参考资料&#xff1a; 1.多元统计分析及R语…

APISpace 生日密码API

APISpace 的 生日密码 API&#xff0c;根据出生日期查询生日密码。每个人的生日都是个迷&#xff0c;星相命理给我们生命的启示,不同的生日都会有不同的命运。生日总有神奇的暗示&#xff0c;凭出生日期的数字测出内在性格和潜在力量。这里帮你揭开【生日密码】的神秘面纱。 返…

R 多元数据可视化

多元数据可视化 1.数据描述2.调入数据3.条图3.1 按行做均值条图3.2 按列做均值条图 4.箱尾图5.星相图5.1具有图例的360度星相图5.2具有图例的180度星相图 6. 脸谱图&#xff08;需加载aplpack&#xff09;7. 调和曲线图&#xff08;需加载mvstats包&#xff09;8. 案例全部程序…

R(现代统计图形)软件的使用

1.R软件的下载安装 1.R官网地址&#xff1a;https://www.r-project.org/ 2.下载流程&#xff1a; 3.安装&#xff1a; 双击运行&#xff0c;语言简体中文&#xff0c;问题不大&#xff0c;都懂的&#xff0c;能不装C盘就不装&#xff1a; 后面我都默认。 4.安装成功&…

面向IoT的协议选择思考

对于使用传感器和保持连接性的IoT系统而言&#xff0c;如何使用这些元素和多种互联网技术相结合呢&#xff1f; 互联网协议并不陌生, 但是IoT相关的互联网协议可能是有不同, 有些协议被用来辅助塑造系统。TCP/IP协议栈上有多个应用层协议&#xff0c; 每种协议都有自己的优势和…