Kubernetes介绍和部署,使用

1.k8s kubernetes来自希腊语舵手,google, 8是ubernete

1.管理docker容器 go写的(并发)
2.用于微服务
3.cncf云原生基金会

2.mater(管理节点)和nodes(微服务节点)

3.部署

1.minikube kind官网在线测试语句
2.kubeadm(官方)(安装比较方便 添加)
3.github下载二进制包
4.yum(老)
5.大神封装的环境
6.买云服务商提供的 阿里云

4.kubeadm

  1. cent7 2g2core
  2. interact network between two nodes(download flannel.yum file connect network)
  3. forbid swap areas ,firework
  4. xshell 查看—>撰写–>send cmd at the same time
  5. kubelet(manage POD and container,in every node of cluster )
    kubeadm(init cluster)
    kubectl(client can connect it )

5.蓝绿发布 预发布(nginx 摘一台机器发布,其他其它的可以正常运行,然后再摘除运行)

6.!!!牛 linux插件直接上传选择的文件

 yum install lrzsz -y  rz   #upload filesz  #download file

7.部署过程

1.关闭防火墙和selinux和swap(k8s为了提供性能关闭虚拟内存) mater和nodes同时配置

         systemctl stop firewalldsystemctl disable firewalldsed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
setenforce 0  #临时close swapsed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时//改host文件方便访问cat >> /etc/hosts << EOF192.168.192.100 k8smaster192.168.172.101 k8snodeEOF//改k8s,让网络生效配置文件cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF//执行命令sysctl --system  #生效# 时间同步yum install ntpdate -y
ntpdate time.windows.com

2.安装docker19 mater和nodes同时配置

         yum install wget -y
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum install docker-ce-19.03.13 -y//改docker加速配置vim /etc/docker/daemon.json{
"registry-mirrors": ["https://gg3gwnry.mirror.aliyuncs.com"]
}//启动服务systemctl enable docker.service//k8s阿里源cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF//安装yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y//启动服务systemctl enable kubelet.service//查看服务和版本yum list installed | grep kubelet
yum list installed | grep kubeadm
yum list installed | grep kubectlkubelet --version

3.master节点执行init命令 会生成join命令

  kubeadm init --apiserver-advertise-address=192.168.172.134 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

4.master复制配置文件

   mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config//得到节点
kubectl get nodes

5.join命令如果被重复执行,必须删除节点重启node节点

       //master生成命令,给node执行join,node不用init
//!!! 主节点的 /etc/kubernetes/admin.conf 一定要复制到node 不然not connection
//坑hostname作为k8s的简单名,不能重复 ,用nmtui修改
//坑 删除“$HOME/.kube/config”文件并执行kubeadm reset命令方可解除 ,(出现各种配置文件和端口占用)//!!!//查看master init生成的join命令kubeadm token create --print-join-command //删除节点kubectl drain node1 --delete-local-data --force --ignore-daemonsetskubectl delete nodes node1//重新加入节点
//disabled_plugins = []//必须重启节点kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
systemctl start docker
systemctl start kubelet

6.从节点执行master生成的join命令

   kubeadm join 192.168.172.132:6443 --token wa5bif.zfuvbesevdfvf4of \
--discovery-token-ca-cert-hash sha256:87cf5828d54dd80da13c4b57c57360370ea0267a7cc3991989ca3006cf3e44d8 

7.节点状态都是notready(坑,节点重启也要重新提交网络)(可以打通master和node内部访问的端口),要在master配置网络(其实都可以,apply上去就好了)
(重启只要主节点还在,就会重新部署从节点的pod)

   wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml//等待片刻...,发现pod flannelkubectl get nodes

8.pod 一个可运行1/多个docker容器

9.k8s部署容器化应用nginx

  1. 打jar/war包

  2. 写Dockerfile生成镜像

  3. kubectl create deployment nginx --image=镜像名,暴露端口

  4. 镜像运行在pod中

   //下面重复启动如何删除节点//部署nginx,通过docker间接创建容器看到running,可能在不同容器运行//暴露端口//查看控制节点,和子节点的状态, 暴露节点的服务kubectl get deploykubectl get pod   //或者podskubectl get services//生成节点kubectl  delete deployment nginx //pod//默认在default   namespace创建
kubectl create deployment nginx --image=nginxkubectl expose deployment nginx --port=80 --type=NodePortkubectl get pod,svc

#部署tomcat

kubectl create deployment tomcat --image=tomcatkubectl expose deployment tomcat --port=8080 --type=NodePort  

//运行springboot项目!!!,记得先测试jar包成功,不然也是会报PullErr的
//写Dockerfile文件

FROM openjdk:8-jdk
VOLUME /tmp
ADD target/demo.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

//打包为镜像

docker build -t 38-springboot-k8s-1.0.0-jar .//spingboot试运行,可以空运行生成yaml文件,然后提交yaml到k8s运行
kubectl create deployment springboot-k8s --image=38-springboot-k8s-1.0.0-jar --dry-run=client -o yaml > deploy.yaml
//改yaml在本地拉取,默认远程拉取,不行包PullErr错误
vi deploy.yaml文件里面container镜像从本地拉取;imagePullPolicy: Never
//提交到k8s
kubectl apply -f deploy.yaml
//暴露端口
kubectl expose deployment springboot-k8s --port=8080 --type=NodePort
kubectl get pod,svc//访问从内:外

10.k8s dashboard 使用页面管理
//提交文件到k8s拉镜像

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yamlkubectl apply -f recommended.yaml//文件修改配置文件里,可以用内部修改配置文件!!!(get pod无法看到已经启动的端口)kubectl -n kubernetes-dashboard edit service kubernetes-dashboard//生成token复制到访问页面dashboardkubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-adminkubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

11.3种端口

  1. nodePort向外暴露的端口
    // 优点 :type:NodePort可以暴露端口,yaml有写不用写语句 nodeport指定端口
    //不足: 1.一个服务一个端口使用2.只能使用30000-32767端口 3.如果虚拟机ip变化,需要人工处理(ip被写进配置了)
  1. targetPort 容器的端
  2. port 集群服务之间内部的端口

12.ingress入口(生产使用,不是内置的) 相当于网关,代替nodePort直接暴露关机端口可能变化
//有多种方式安装,我们使用拉取 nginx的方式
//下载deploy.yuml文件,改image的地址
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml

        spec:329       hostNetwork: true   //添加 330       dnsPolicy: ClusterFirst331       containers:332         - name: controller333           image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.33.0  //修改334           imagePullPolicy: IfNotPresent
//rule.yaml用于配置路由的规则,比如外面要访问到www.abc.com才能直接访问到内部80nginx端口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: k8s-ingress
spec:rules:- host: www.abc.comhttp:paths:- pathType: Prefixpath: /backend:service:name: nginxport:number: 80
     kubectl apply -f rule.yaml//如果之前存在kubectl delete ing k8s-ingress//查看配置的规则,记住要看规则的地址,客户端通过域名和ip同时访问服务器,然后通过ingress自动映射到pod的内部端口80//要在规则配置容器的内部端口才能访问!!!  kubectl get ingkubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
//windows模拟访问到C:\Windows\System32\drivers\etc\hosts添加192.168.192.100 www.abc.com
//提交的任务如果有错误可以 kubectl delete servive/deploy/pod xx//在客户端访问www.abc.com会跳到nginx页面

13.部署springcloud项目
//k8s部署无状态访问(静态数据) pod删除掉数据也保存下来没有影响下一次部署, euraka是有状态访问,影响灰度发布, 数据库会动态增加数据
//!!!到工作节点上传jar和Dockerfile
//先部署提供者和消费者,再部署网关,在加ingress(rule)
//和springboot流程一致,增加了ingress
//查看容器日志

kubectl logs -f xxxpods

//deploy是controller的类型,还可以部署定时任务…

14.动态扩容缩容
//改yaml的replicate的数量,注册中心会知道注册了多少台服务器
//如果在运行,更新配置文件

   vi deploy.yaml文件里面container镜像从本地拉取;//修改集群数spec:replicas: 2kubectl apply -f deploy.yaml

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

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

相关文章

netty(一):NIO——处理消息边界

处理消息边界 为什么要处理边界 因为会存在半包和粘包的问题 1.客户端和服务端约定一个固定长度 优点&#xff1a;简单 缺点&#xff1a;可能造成浪费 2.客户端与服务端约定一个固定分割符 *缺点 效率低 3.先发送长度&#xff0c;再发送数据 TLV格式&#xff1a; type…

查询Oracle和MySQL数据库中当前所有连接信息

查询Oracle当前所有连接信息&#xff1a; SELECTs.sid AS 会话ID,s.serial# AS 序列号,s.username AS 用户名,s.osuser AS 操作系统用户,s.machine AS 客户端机器,s.program AS 客户端程序,s.status AS 会话状态,s.sql_id AS 正在执行的SQL_ID,t.sql_text AS 正在执行的SQL文本…

[前端系列第7弹]Vue:一个渐进式的 JavaScript 框架

Vue 是一个用于构建用户界面的 JavaScript 框架&#xff0c;它具有以下特点&#xff1a; 渐进式&#xff1a;Vue 可以根据不同的使用场景&#xff0c;灵活地选择使用库或者框架的方式&#xff0c;从而实现渐进式的开发。响应式&#xff1a;Vue 通过数据绑定和虚拟 DOM 技术&am…

【ROS】参数服务器--理论模型与参数操作(C++)

一、概念介绍 参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 作用&#xff1a;存储一些多节点…

C语言:库函数atoi及其模拟实现

atoi&#xff1a; atof是C语言标准库中的一个函数&#xff0c;用于将字符串转换为对应的浮点数/整形数。 函数接受一个参数str&#xff0c;该参数是一个指向以null结尾的字符串的指针。atof函数会尝试将这个字符串转换为一个浮点数&#xff0c;并返回转换后的结果。 要注意的是…

LeetCode 面试题 01.01. 判定字符是否唯一

文章目录 一、题目二、C# 题解 一、题目 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同&#xff0c;点击此处跳转。 示例 1&#xff1a; 输入: s “leetcode” 输出: false 示例 2&#xff1a; 输入: s “abc” 输出: true 限制&#xff1a; 0 < le…

飞机打方块(五)游戏音乐

一、新建节点 1.在Start场景中新建Music节点&#xff0c;绑定canvas 2.在Game场景中新建Music节点 3.新建节点 4.新建Music脚本&#xff0c;绑定Canvas Music.ts const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {p…

[Go版]算法通关村第十三关白银——数组实现加法和幂运算

目录 数组实现加法专题题目&#xff1a;数组实现整数加法思路分析&#xff1a;复杂度&#xff1a;Go代码 题目&#xff1a;字符串加法思路分析&#xff1a;复杂度&#xff1a;Go代码 题目&#xff1a;二进制加法思路分析&#xff1a;复杂度&#xff1a;Go代码 幂运算专题题目&a…

*args无疑是解决函数重载的一大创新利器--我用可变数量参数解决了函数重载问题

需求分析 最近遇到这样一个需求&#xff1a;根据用户传递的不同参数数量执行不同的功能。我这几天一直在思考这个问题&#xff1a;如何根据参数数量去执行不同的功能&#xff0c;最初的设想是把不需要的参数设置为NONE或者""再或者" "(后两者引号均表示传空…

Flink 流式读写文件、文件夹

文章目录 一、flink 流式读取文件夹、文件二、flink 写入文件系统——StreamFileSink三、查看完整代码 一、flink 流式读取文件夹、文件 Apache Flink针对文件系统实现了一个可重置的source连接器&#xff0c;将文件看作流来读取数据。如下面的例子所示&#xff1a; StreamExe…

【无标题】QT应用编程: QtCreator配置Git版本控制(码云)

QT应用编程: QtCreator配置Git版本控制(码云) 感谢&#xff1a;DS小龙哥的文章&#xff0c;这篇主要参考小龙哥的内容。 https://cloud.tencent.com/developer/article/1930531?areaSource102001.15&traceIdW2mKALltGu5f8-HOI8fsN Qt Creater 自带了git支持。但是一直没…

软件测试学术顶会——ISSTA 2023 论文(网络安全方向)清单、摘要与总结

总结 本次会议涵盖的安全研究主题广泛,包括源代码分析、二进制代码分析、恶意软件检测、漏洞检测、模糊测试、程序验证等。一些热门的研究方向包括:基于机器学习的漏洞检测、大型语言模型在软件安全中的应用、区块链智能合约安全分析。这些方向都在最近几年持续发展。一些较冷门…

【C++】IO流

C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据&#xff0c;并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。 注意宽度输出和精度输出控制。C语言借助了相应的缓冲区…

postgresql 分组

postgresql 数据汇总 分组汇总聚合函数注意 总结 分组统计总结 高级分组总结 分组汇总 聚合函数 聚合函数&#xff08;aggregate function&#xff09;针对一组数据行进行运算&#xff0c;并且返回单个结果。PostgreSQL 支持以下常见的聚合函数&#xff1a; • AVG - 计算一…

redis--数据类型

数据类型 String 描述&#xff1a;String类型是Redis中最基本的数据类型&#xff0c;它可以存储任何二进制数据&#xff0c;最大长度为512MB。尽管它被称为"字符串"&#xff0c;但它实际上可以用于存储多种类型的数据&#xff0c;包括文本、整数、浮点数和二进制数…

在思科(Cisco)路由器中使用 SNMP

什么是SNMP SNMP&#xff0c;称为简单网络管理协议&#xff0c;被发现可以解决具有复杂网络设备的复杂网络环境&#xff0c;SNMP 使用标准化协议来查询网络上的设备&#xff0c;为网络管理员提供保持网络环境稳定和远离停机所需的重要信息。 为什么要在思科设备中启用SNMP S…

神经网络基础-神经网络补充概念-49-adam优化算法

概念 Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种优化算法&#xff0c;结合了动量梯度下降法和RMSProp的优点&#xff0c;用于在训练神经网络等深度学习模型时自适应地调整学习率。Adam算法在深度学习中广泛应用&#xff0c;通常能够加速收敛并提高模型性能…

基于springboot+vue的论坛系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?

一、引言 乳腺癌是女性最常见的恶性肿瘤之一&#xff0c;也会发生在男性身上。每年全球有数百万人被诊断出乳腺癌&#xff0c;对患者的生活和健康造成了巨大的影响。早期的乳腺癌检测和准确的诊断对于提高治疗的成功率至关重要。然而&#xff0c;乳腺癌的早期诊断面临着许多挑战…

【TypeScript】枚举类型

在 TypeScript 中&#xff0c;枚举&#xff08;Enum&#xff09;是一种用于定义命名常量集合的数据类型。枚举使代码更加可读和可维护&#xff0c;因为它们为一组具有语义的值提供了命名。 以下是 TypeScript 中枚举的基本用法和特点&#xff1a; // 声明一个枚举 enum Direc…