文章目录
Kubernetes是什么
Kubernetes能干什么
容器技术市场份额
架构原理、交互流程
安装
k8s安装
calico安装
dashboard令牌
设置自动补全
术语
命令
资源(resource)
节点(node)
namespace,pod
deploy
公共操作
查看日志,查看描述,用于排错
使用scale对deploy扩缩容
service负载均衡网络
滚动升级
yaml配置⭐⭐⭐⭐⭐
不知道yaml怎么写了,使用查看yaml的黑科技,⭐⭐⭐⭐⭐
yaml命令
格式
使用密钥拉取私有仓库
command与args
容器的生命周期钩子
静态pod
probe探针(健康检查机制)
工作负载
deployment
HPA自动扩缩容
StaefulSet
statefulset和deployment的区别(面试题)
Job 任务
CronJob 定时任务
Kubernetes是什么
为了生产环境的容器化大规模应用编排,必须有一个自动化的框架系统,Kubernetes是一种容器编排系统 大型云平台=kubernetes+cncf其他软件 就是一个容器管家:
安装了很多应用。 ------------------------- qq电脑管家。(自动杀垃圾,自动卸载没用东西…)
机器上有很多容器。 -------------------------- kubernete容器的管家。(容器的启动停止、故障转义、负载均衡等)
Kubernetes能干什么
服务发现和负载均衡(类比consul)
存储编排
自动部署和回滚
自动完成装箱计算
自动完成装箱计算 允许你指定每个容器所需的CPU和内存。Kubernetes可以做出决策管理容器资源
自我修复
密钥与配置管理
…
官方文档
容器技术市场份额
容器化
服务编排
大型云平台=kubernetes+cncf其他软件 容器管家:
安装了很多应用。 ------------------------- qq电脑管家。(自动杀垃圾,自动卸载没用东西…)
机器上有很多容器。 -------------------------- kubernete容器的管家。(容器的启动停止、故障转义、负载均衡等)
架构原理、交互流程
想让k8s部署一个tomcat?
0、开机默认所有节点的kubelet、master节点的scheduler(调度器)、controller-manager(控制管理器)一直监听master的api-server发来的事件变化(for ::)
1、程序员使用命令行工具: kubectl ; kubectl create deploy tomcat --image=tomcat8(告诉master让集群使用tomcat8镜像,部署一个tomcat应用)
2、kubectl命令行内容发给api-server,api-server保存此次创建信息到etcd
3、etcd给api-server上报事件,说刚才有人给我里面保存一个信息。(部署Tomcat[deploy])
4、controller-manager监听到api-server的事件,是 (部署Tomcat[deploy])
5、controller-manager 处理这个 (部署Tomcat[deploy])的事件。controller-manager会生成Pod的部署信息【pod信息】
6、controller-manager 把Pod的信息交给api-server,再保存到etcd
7、etcd上报事件【pod信息】给api-server。
8、scheduler专门监听 【pod信息】 ,拿到 【pod信息】的内容,计算,看哪个节点合适部署这个Pod【pod调度过后的信息(node: node-02)】,
9、scheduler把 【pod调度过后的信息(node: node-02)】交给api-server保存给etcd
10、etcd上报事件【pod调度过后的信息(node: node-02)】,给api-server
11、其他节点的kubelet专门监听 【pod调度过后的信息(node: node-02)】 事件,集群所有节点kubelet从api-server就拿到了 【pod调度过后的信息(node: node-02)】 事件
12、每个节点的kubelet判断是否属于自己的事情;node-02的kubelet发现是他的事情
13、node-02的kubelet启动这个pod。汇报给master当前启动好的所有信息
安装
k8s安装
准备至少两台机器,内网互通。其中一台大于等于2核4G,作为master节点 待补充
calico安装
将文件下载下来 https://docs.projectcalico.org/manifests/calico.yaml
然后修改相应位置,再使用kubectl apply -f xxxx.yaml
安装
dashboard令牌
dashboard可视化界面,每次进入都要令牌,使用以下命令查看
kubectl -n kubernetes-dashboard describe secret $( kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1 }' )
设置自动补全
官方文档
yum install bash-completion
echo 'source <(kubectl completion bash)' >> ~/.bashrc
kubectl completion bash > /etc/bash_completion.d/kubectl
source /usr/share/bash-completion/bash_completion
术语
资源(resource)
包含Pod
,namespace
,nodes
,deployments
,replicaset
等等 deploy包含启动了多个pod,pod启动多个container,删除前面的,后面的也就没了
名称空间
特点:资源隔离、网络不隔离 名称空间未来如何隔离 1)、基于环境隔离(prod,test) prod:部署的所有应用 test:部署的所有应用 2)、基于产品线的名称空间(商城,android,ios,backend); 3)、基于团队隔离 访问其他名称空间的东西? 1)、配置直接拿来用。不行 2)、网络访问,可以。
命令
kubectl的命令非常多,靠所有都记住是不现实的,可以通过 kubectl 命令 --help
查看命令的用法,文档真的是非常详细,有解释并且有示例 官方命令文档 官方教程文档 其他作者的文档
资源(resource)
注意并不是所有的对象都在名称空间中 显示所有的资源类型: kubectl api-resources
通过api-resources --namespaced查看是否在名称空间: 在名称空间里 kubectl api-resources --namespaced=true 不在名称空间里 kubectl api-resources --namespaced=false
获取某种资源的列表:kubectl get 资源类型
获取类型为Deployment的资源列表 kubectl get deployments
获取类型为Pod的资源列表 kubectl get pods
获取类型为Node的资源列表 kubectl get nodes
节点(node)
获取类型为Node的资源列表 kubectl get nodes
namespace,pod
查看所有名称空间的 Deployment kubectl get deployments -A
或kubectl get deployments --all-namespaces
查看所有名称空间的 Pod: kubectl get pod -A
或kubectl get pod --all-namespaces
查看指定命名空间 kube-system 的 Deployment kubectl get deployments -n kube-system
查看指定名称空间 kube-system 的 pod:kubectl get pod -n kube-system
获取pod,node,deploy 等资源的格式是一样的,可以同时一句命令获得:kubectl get pod,node,deploy,namespace
启动一个pod: kubectl run nginx --image=nginx
交互进入pod:kubectl exec -it pod名 -- sh
进入pod内的特定容器:kubectl exec -it pod名 -c nginx-container(容器名) -- /bin/bash
查看pod标签:kubectl get pod --show-labels
deploy
部署一个应用:kubectl create deployment my-nginx --image=nginx
查看deploy:kubectl get deploy
查看所有名称空间下的,查看指定命名空间下的deploy,写法参照pod
公共操作
公共操作不针对特定资源,很多资源都适用
删除: 以删除deploy为例,其他资源一样:kubectl delete deployment.apps/2-nginx
或kubectl delete deploy my-nginx
查看: 以node为例:kubectl get node
标签 查看标签:kubectl get pod --show-labels
以pod为例,打标签:kubectl label pod -nginx-6b74b79f57-zgt5c aaa=bbb
按标签过滤资源:kubectl get deploy -l app=nginx
yaml黑科技命令,请查看yaml部分
查看日志,查看描述,用于排错
查看pod日志,格式:kubectl logs Pod名称 查看名称为 my-nginx-6b74b79f57-gtrcq的P od内的容器打印的日志: kubectl logs my-nginx-6b74b79f57-gtrcq
查看资源的描述信息:格式:kubectl describe 资源类型 资源名称 查看名称为nginx-XXXXXX的Pod的信息 kubectl describe pod nginx-XXXXXX
查看名称为nginx的Deployment的信息 kubectl describe deployment my-nginx
使用scale对deploy扩缩容
kubectl scale --replicas=2 deployment.apps/my-nginx
service负载均衡网络
获取service列表:kubectl get svc
对deploy下的pod进行负载均衡:kubectl expose deploy my-nginx --port=8888 --target-port=80 --type=NodePort
使用kubectl get svc
查看 内网使用10.96.60.131:8888
访问,外网使用公网IP:30110
访问 如果此时对deploy进行扩容,新的pod仍然会自动加入到service中
滚动升级
tomcat升级:kubectl set image deployment.apps/tomcat6 tomcat=tomcat:jre8-alpine #可以携带--record参数,记录变更
查看deploy的版本历史:kubectl rollout history deployment.apps/tomcat6
或 kubectl rollout history deploy tomcat6
回滚到指定版本:kubectl rollout undo deployment.apps/tomcat6 --to-revision=1
或 kubectl rollout undo deploy tomcat6 --to-revision=1
yaml配置⭐⭐⭐⭐⭐
不知道yaml怎么写了,使用查看yaml的黑科技,⭐⭐⭐⭐⭐
1、kubectl get pod my-nginx666 -oyaml
集群中挑一个同类资源,获取出他的yaml。 2、kubectl run my-tomcat --image=tomcat --dry-run -oyaml
干跑一遍 3、kubectl explain pod.metadata.labels
查看具体的字段写法,可以无限链式写 如果还不知道怎么写,就去官方文档搜索
yaml命令
创建或修改yaml声明的资源:kubectl apply -f demo.yaml
销毁yaml声明的资源: kubectl delete -f demo.yaml
yaml文件修改了,对比之前不同:kubectl diff -f k8s-demo.yaml
格式
使用密钥拉取私有仓库
pod的底层是容器,如果是私有仓库,就必须创建密钥: #这个秘钥默认在default名称空间,不能被hello名称空间共享
kubectl create secret -n hello docker-registry my-aliyun \
--docker-server= registry.cn-hangzhou.aliyuncs.com \
--docker-username= 用户名 \
--docker-password= 密码
在yaml文件中声明密钥
apiVersion : v1
kind : Pod
metadata :
name : foo
spec :
containers :
- name : foo
image : registry.cn- zhangjiakou.aliyuncs.com/atguigudocker/atguigu- javaimg: v1.0
imagePullSecrets :
- name : my- aliyun
command与args
官方文档 示例:
apiVersion : v1
kind : Pod
metadata :
name : "commandtest"
namespace : default
labels :
app : "commandtest"
spec :
containers :
- name : commandtest
image : "alpine"
command : [ "echo" ]
args :
- "def"
容器的生命周期钩子
使用 kubectl explain pod.spec.containers.lifecycle.postStart
查看解释 有三种钩子:exec,httpGet, tcpSocket 钩子字段解释:postStart
启动后钩子,preStop
delete前钩子 以httpGet钩子为例:
apiVersion : v1
kind : Pod
metadata :
name : test- nginx
spec :
containers :
- name : test- nginx
image : nginx
lifecycle :
postStart :
httpGet :
port : 8978
path : "/bb"
host : "120.79.202.23"
scheme : HTTP
preStop :
httpGet :
port : 8978
path : "/bb"
host : "120.79.202.23"
scheme : "HTTP"
静态pod
在/etc/kubernetes/manifests位置的yaml文件,机器启动,kubelet自己就把他启动起来 yaml文件放在哪个节点,静态pod就在哪个节点启动,并且删除后可以重启
probe探针(健康检查机制)
官方文档 示例:
apiVersion : v1
kind : Pod
metadata :
labels :
test : liveness
name : liveness- exec
spec :
containers :
- name : liveness
image : k8s.gcr.io/busybox
args :
- /bin/sh
- - c
- touch /tmp/healthy; sleep 30; rm - rf /tmp/healthy; sleep 600
livenessProbe :
exec :
command :
- cat
- /tmp/healthy
initialDelaySeconds : 5
periodSeconds : 5
启动探针,存活探针,就绪探针示例:
apiVersion : v1
kind : Pod
metadata :
name : "nginx-start-probe02"
namespace : default
labels :
app : "nginx-start-probe02"
spec :
volumes :
- name : nginx- vol
hostPath :
path : /app
- name : nginx- html
hostPath :
path : /html
containers :
- name : nginx
image : "nginx"
ports :
- containerPort : 80
startupProbe :
exec :
command : [ "/bin/sh" , "-c" , "cat /app/abc" ]
periodSeconds : 5
timeoutSeconds : 5
successThreshold : 1
failureThreshold : 3
volumeMounts :
- name : nginx- vol
mountPath : /app
- name : nginx- html
mountPath : /usr/share/nginx/html
livenessProbe :
exec :
command : [ "/bin/sh" , "-c" , "cat /usr/share/nginx/html/abc.html" ]
periodSeconds : 5
timeoutSeconds : 5
successThreshold : 1
failureThreshold : 3
readinessProbe :
httpGet :
path : /abc.html
port : 80
scheme : HTTP
initialDelaySeconds : 2
periodSeconds : 5
timeoutSeconds : 5
successThreshold : 3
failureThreshold : 5
配置项:
工作负载
deployment
deployment每次创建或更新,都会对应一个replica资源,作为版本记录。 各个字段含义:
# Deployment:
# 滚动更新: 10 2 - 8 4 , 2 4 0 - 10
# RS1 RS2 两个版本同时存在
minReadySeconds: 10 这个Pod10s以后才认为是read状态,影响多久后杀死旧Pod
paused : false 当前是否停止状态,暂停更新
progressDeadlineSeconds: 600 处理的最终期限,Deployment如果超过了这个指定的处理描述就会给集群汇报错误
The maximum time in seconds for a deployment to make progress before it is
considered to be failed. The deployment controller will continue to process
failed deployments and a condition with a ProgressDeadlineExceeded reason
will be surfaced in the deployment status. Note that progress will not be
estimated during the time a deployment is paused. Defaults to 600s.
replicas : Pod 期望的数量(副本数量),是 ReplicaSet 控制器实现的
revisionHistoryLimit : 旧副本集保留的数量,可回滚的数量,默认是10
selector -required-: 指定我们Deployment要控制的所有的Pod的共通标签
strategy : 指定新Pod替换旧Pod的策略
rollingUpdate : 指定滚动更新策略
maxSurge 【最大增量】: 2 一次最多新建几个Pod。 百分比和数字都可以
MaxUnavailable:为0 的时候, maxSurge不能为0
maxUnavailable【最大不可用量】: 4 最大不可用的Pod数量,比如有10个Pod,部署时一定要保证6个pod可用
type : Recreate/RollingUpdate(默认)
template -required-: 编写Pod
简单示例:
apiVersion : apps/v1
kind : Deployment
metadata :
name : mydeploy- 01
namespace : default
labels :
dep : test- 01
spec :
selector :
matchLabels :
pod-name : ppp
template :
metadata :
labels :
pod-name : ppp
spec :
containers :
- name : nginx
image : nginx: latest
resources :
requests :
cpu : 100m
memory : 100Mi
limits :
cpu : 100m
滚动更新示例:
apiVersion : apps/v1
kind : Deployment
metadata :
name : mydeploy- 05
namespace : default
labels :
dep : test- 04
spec :
strategy :
type : RollingUpdate
rollingUpdate :
maxUnavailable : 2
maxSurge : 20%
replicas : 10
selector :
matchLabels :
pod-name : aaa55566
template :
metadata :
labels :
pod-name : aaa55566
spec :
containers :
- name : nginx- 01
image : nginx
HPA自动扩缩容
注意:需要先安装metrics
组件,才支持动态扩缩容 官方文档 安装点我 使用kubectl apply -f 即可安装 命令:
kubectl top nodes --use-protocol-buffers
apiVersion : autoscaling/v1
kind : HorizontalPodAutoscaler
metadata :
creationTimestamp : null
name : php- apache
spec :
maxReplicas : 10
minReplicas : 1
scaleTargetRef :
apiVersion : apps/v1
kind : Deployment
name : php- apache
targetCPUUtilizationPercentage : 50
StaefulSet
有状态副本集;Deployment等属于无状态的应用部署(stateless)
如果一个应用程序不需要稳定的网络标识,或者不需要按顺序部署、删除、增加副本,就应该考虑使用 Deployment 这类无状态(stateless)的控制器 示例:
apiVersion : v1
kind : Service
metadata :
name : stateful- tomcat
labels :
app : stateful- tomcat
spec :
ports :
- port : 8123
name : web
targetPort : 8080
clusterIP : None
selector :
app : stateful- tomcat
---
apiVersion : apps/v1
kind : StatefulSet
metadata :
name : stateful- tomcat
spec :
selector :
matchLabels :
app : stateful- tomcat
serviceName : "stateful-tomcat"
replicas : 3
template :
metadata :
labels :
app : stateful- tomcat
spec :
terminationGracePeriodSeconds : 10
containers :
- name : tomcat
image : tomcat: 7
ports :
- containerPort : 8080
name : web
删除一个,重启后名字,ip等都是一样的。保证了状态
kubectl explain StatefulSet.spec
podManagementPolicy:
OrderedReady(按序)、Parallel(并发)
serviceName - required-
设置服务名,就可以用域名访问pod了。
pod- specific- string.serviceName.default.svc.cluster.local
kubectl run - i - - tty - - image busybox dns- test - - restart=Never - - rm /bin/sh
ping stateful- tomcat- 0.stateful- tomcat
查看pod: 查看svc:
statefulset和deployment的区别(面试题)
看这里
Job 任务
注意:任务是通过pod运行的,每个pod执行完,也就是一个任务完成了。其中的pod一定要保证不是阻塞的,否则任务执行不完
apiVersion : batch/v1
kind : Job
metadata :
name : pi
spec :
completions : 4
parallelism : 3
template :
spec :
containers :
- name : pi
image : busybox
command : [ "/bin/sh" , "-c" , "echo abc" ]
restartPolicy : Never
activeDeadlineSeconds : 10
ttlSecondAfterFinished : 10
CronJob 定时任务
定时周期性的执行 Job 任务 例子:
apiVersion : batch/v1beta1
kind : CronJob
metadata :
name : hello
spec :
schedule : "*/1 * * * *"
concurrencyPolicy : Allow
failedJobsHistoryLimit : 1
successfulJobsHistoryLimit : 3
startingDeadlineSeconds : 100
suspend : false
jobTemplate :
spec :
template :
spec :
containers :
- name : hello
image : busybox
args :
- /bin/sh
- - c
- date; echo Hello from the Kubernetes cluster
restartPolicy : OnFailure
关系图
你可能感兴趣的:(容器,kubernetes,云原生)
centos8.0 docker ngnix
期待着2013
服务器
问题1:镜像拉取不下来,用DAO云加速器问题2:ngnix镜像不能运行,无法检索OCI运行时错误,更新包yumupdatelibseccomp问题3:dockerrun-v目录有ngninx.conf或conf.d等.特殊字符,报无效格式docker:invalidreferenceformat..,不要用\换行,用一行运行想到之前装为知等容器时都是单行命令,删掉\及换行后正常完成安装。在Cent
windows10安装Docker部署Jar包并更新Jar包部署详解
Love_Erlc
Docker springboot spring boot docker idea 后端 java
windows10安装Docker部署Jar包并更新Jar包部署文章目录windows10安装Docker部署Jar包并更新Jar包部署步骤一、生成Dockerfile文件二、编辑Dockerfile文件三、构建镜像四、创建容器五、运行查看结果六、修改项目重新生成jar包,替换原来C:\Users\64641\jar目录下的jar包七、停止容器并启动容器八、查看运行结果步骤一、生成Dockerfi
全面披露!华为云分布式云原生技术与实践
CSDN云原生
云原生 华为云 分布式
出品|CSDN云原生随着云原生应用深入企业各个业务场景,云原生正在走向分布式,跨云跨地域统一协同治理,保证一致应用体验等新的需求日渐突出。分布式云原生都涉及哪些核心技术?有哪些典型的应用场景?值得我们去探究。HCDE(HuaweiCloudDeveloperExperts)是经华为云认证的熟悉一种或多种华为云开放能力,并对赋能全球开发者有突出贡献的个人,旨在帮助全球开发者成长,构建全球开发者生态。
【云原生】SpringCloud-Spring Boot Starter使用测试
egekm_sefg
面试 学习路线 阿里巴巴 spring boot 云原生 spring cloud
目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现:?创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。?在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringB
跨语言语义理解与生成:多语言预训练方法及一致性优化策略
网罗开发
AI 大模型 人工智能 深度学习 负载均衡
网罗开发(小红书、快手、视频号同名) 大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、HarmonyOS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者:《ESP32-C3物联网工程开发实战》图书作者:《SwiftUI入门,进阶与实战》超级个体:CO
中电金信:数字基础设施未来展望·行业定制与开源融合
中电金信
人工智能 大数据
随着数字化向数智化的演进,各行各业对新型数字基础设施的需求不断攀升。在技术层面,云原生和平台化已经成为构建行业数字基础设施的普遍选择。在这一进程中,不仅要满足行业对极致性能的特殊需求,实现运维与管理的高效性,构建具有弹性的系统,还需要应对混合架构带来的多样化技术选项,以及满足行业定制化需求和自主可控的挑战,同时还要应对应用集群开发和多样化数据产品构建的复杂性。中电金信立足于行业需求,积极构建新型数
mysql8.4+mysql router读写分离
Alex_z0897
mysql 数据库
以下为容器环境内搭建准备工作:拉取镜像:镜像版本mysql8.4container-registry.oracle.com/mysql/community-router8.4下载mysql_shellmysql-shell-9.0.1-linux-glibc2.17-x86-64bit.tar.gz下载地址:https://downloads.mysql.com/archives/shell/参考
Docker 与 CI/CD:自动化构建和部署
drebander
docker docker ci/cd 自动化
在现代软件开发中,CI/CD(持续集成/持续部署)是一种高效的软件开发和运维方法。CI/CD通过自动化构建、测试和部署流程,减少了人为错误,提高了软件交付的速度和质量。Docker,作为一种容器化平台,为CI/CD提供了理想的运行环境,通过容器化实现应用的一致性和可移植性。本文将探讨如何将Docker与CI/CD集成,实现自动化构建和部署。1.Docker与CI/CD集成的优势1.1通过Docke
Docker 与持续集成 / 持续部署(CI/CD)的集成(一)
计算机毕设定制辅导-无忧学长
# Docker docker ci/cd 容器
一、引言在当今快速发展的软件开发领域,高效、可靠的开发与部署流程是企业保持竞争力的关键。Docker与持续集成/持续部署(CI/CD)的集成,正成为众多开发团队提升效率、优化流程的重要手段。Docker作为一种开源的容器化平台,通过将应用程序及其依赖项打包在一个可移植的容器中,实现了环境的一致性和隔离性。这意味着,无论在开发、测试还是生产环境中,应用程序都能以相同的方式运行,有效解决了“在我机器上
Sentinel实战:构建可靠的微服务防护系统
ivwdcwso
安全 sentinel 微服务 架构 防护 安全 java 开发
1.引言在微服务架构中,保障系统的可用性和稳定性至关重要。Sentinel作为一个强大的流量控制组件,为我们提供了实现熔断、限流、系统保护等功能的有力工具。本文将通过实际案例,详细介绍Sentinel的使用方法和最佳实践,并探讨如何在容器环境中部署Sentinel。2.Sentinel简介Sentinel是阿里巴巴开源的面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系
Spring Bean 生命周期详解
黑风风
java 多线程 spring java 数据库
SpringBean生命周期详解在Spring框架中,Bean的生命周期由Spring容器全权管理。了解和掌握Bean的生命周期对于使用Spring开发稳定且高效的应用程序至关重要。本文将详细介绍SpringBean生命周期的五个主要阶段:实例化、属性注入、初始化、使用和销毁,并涵盖各个阶段的关键步骤和扩展点。1.实例化(Instantiation)实例化阶段包括以下关键步骤:BeanNameAw
Spring Bean 生命周期
CT随
spring java 后端
SpringBean生命周期是Spring框架中一个非常重要的概念,它描述了一个Bean从创建到销毁的完整过程。这个生命周期可以分为五个主要阶段:创建前准备阶段、创建实例阶段、依赖注入阶段、容器缓存阶段和销毁实例阶段。下面我们将详细介绍每个阶段的作用,并通过生活中的例子来帮助理解。创建前准备阶段定义与作用:在这一阶段,Spring容器会解析配置文件或注解,查找并加载需要被管理的Bean的相关信息。
Spring Bean 生命周期的执行流程
涛粒子
spring java 后端
1.Bean定义阶段解析配置元数据:Spring容器会读取配置信息,这些配置信息可以是XML文件、Java注解或者Java配置类。容器根据这些配置信息解析出Bean的定义,包括Bean的类名、作用域、依赖关系等。注册Bean定义:解析完成后,Spring会将Bean定义信息注册到BeanDefinitionRegistry中,BeanDefinitionRegistry是一个存储Bean定义的注册
深入解析 C++ STL中的 std::map 容器
金外飞176
C++ 开发语言 c++
深入解析C++中的std::map容器在C++标准模板库(STL)中,std::map是一种非常强大且常用的关联式容器。它通过键值对(key-value)的方式存储数据,并且基于红黑树实现,能够高效地进行插入、删除和查找操作。本文将通过一个实际的项目代码,深入探讨std::map的各种特性,包括构造、插入、删除、查找、排序以及与其他容器的交互。1.std::map的基本概念std::map是一个关
Docker 部署AnythingLLM
炫爱小七
docker 容器 ai
两个指令搞定1.下载镜像dockerpullmintplexlabs/anythingllm2.运行容器exportSTORAGE_LOCATION=$HOME/anythingllmmkdir-p$STORAGE_LOCATIONchmod-R777$STORAGE_LOCATIONtouch"$STORAGE_LOCATION/.env"dockerrun-d-p3001:3001\--cap
如何将Docker运行的镜像写入数据后导出为新的镜像
醉心编码
脚本基础 人工智能基础 技术类 docker
如何将Docker运行的镜像写入数据后导出为新的镜像一、背景知识二、步骤详解1.查找并确认要导出的容器2.使用dockercommit命令保存容器为新的镜像3.验证新镜像4.(可选)导出新镜像为tar文件三、注意事项四、总结在Docker环境中,我们经常需要将运行中的容器保存为镜像,特别是当我们在容器中进行了数据写入或配置更改后。本文将详细介绍如何将Docker运行的镜像写入数据后导出为新的镜像。
ollama的docker 使用教程
贾斯汀玛尔斯
数据湖 AI Docker容器 docker eureka 容器
好的,下面是Ollama在Docker中的使用教程。我将详细描述如何在Docker容器中运行Ollama,包括安装、配置和常用操作。OllamaDocker使用教程Ollama可以通过Docker运行,提供了一个简洁且隔离的环境来使用AI模型。本文将引导你如何在Docker中设置和使用Ollama。目录前提条件拉取OllamaDocker镜像启动Ollama容器基本命令操作停止容器<
《道德经》里的职场智慧,远比你想象的还要强大!
Yage520
程序员创富 职场和发展 学习方法 创业创新 人工智能
《道德经》里的职场智慧,远比你想象的还要强大!你有没有过这样的困惑?明明加班加点、尽力管理,但结果却越来越累,效果却越来越差?问题出在哪里?答案,其实在《道德经》里!“上善若水,水善利万物而不争。”这句话暗藏着深刻的智慧!水,看似柔弱,却能穿透岩石;看不见摸不着,却能适应任何形状的容器。更神奇的是,水从不争斗,却无处不在,滋养万物!职场启示:不争,不是无能!你试试看,越是想控制一切,反而越容易弄巧
如何将Docker容器打包并在其他服务器上运行
IT小辉同学
技巧性工具栏 分布式云部署 搜索引擎 docker 服务器 容器
如何将Docker容器打包并在其他服务器上运行我会幻想很多次我们的相遇,你穿着合身的T恤,一个素色的外套,搭配一条蓝色的牛仔裤,干净的像那天空中的云朵,而我,还是一个的傻傻的少年,我们相识而笑,默默不语,如此甚好!Docker容器使得应用程序的部署和管理变得更加简单和高效。有时,我们可能需要将一个运行中的Docker容器打包,并在其他服务器上运行。本文将详细介绍如何实现这一过程。1.提交容器为镜像
Python-tkinter自制登录界面(含注册)
GCHEK
python 开发语言
简单的用户登录、注册界面importtkinterastkimporttimeimportsubprocessimportsysimportosimporttkinter.messageboxwindow=tk.Tk()window.title('GCHEK')window.geometry('400x300')#设置储存用户信息的容器,这里用的txt。ifnotos.path.exists('U
mac下docker搭建nginx+php+mysql,并实现nginx负载均衡
自娱自乐22
macos docker nginx 负载均衡 php
一环境系统:macOSSonoma14.3芯片:AppleM3Prodocker版本:25.0.5二软件OrbStack[推荐,一款轻量化的docker管理软件,还是docker的命令]item2三步骤拉取nginx镜像dockerpullnginx新建一个nginx容器dockerrun--namenginx5-d-p80:80nginx确认nginx内部的目录[第一次一定要确认下目录]-配置目
容器docker k8s相关的问题汇总及排错
weixin_43806846
docker kubernetes 容器
1.明确问题2.排查方向2.1、docker方面dockerlogs-f容器IDdocker的网络配置问题。2.2、k8s方面node组件问题pod的问题(方式kubectldescribepopod的名称-n命名空间&&kubectllogs-fpod的名称-n命名空间)调度的问题(污点、节点选择器与标签不匹配、存储卷的问题)service问题(访问不了,ingress的问题、service标签
Maven 与 Docker 集成:构建 Docker 镜像并与容器化应用集成
drebander
docker maven docker
在现代软件开发中,容器化已成为一种流行的部署和运行应用程序的方式。通过将应用程序及其所有依赖打包成Docker镜像,开发者可以确保应用能够在不同的环境中一致地运行。而Maven是广泛使用的构建工具,能够帮助管理项目的构建、依赖和发布。本文将介绍如何使用Maven构建Docker镜像,并将其与容器化应用集成,以便于自动化部署和管理。1.Maven与Docker集成概述Maven可以通过插件来构建Do
Spring IoC容器的两大功能
Mr_Zerone
SpringFramework spring java 后端
1.控制反转(1)没有控制反转的情况下常规思路下,也就是在没有控制反转的情况下,程序员需要通过编写应用程序来创建(new关键字)和使用对象。(2)存在控制反转的情况下控制反转主要是针对对象的创建和调用控制而言的。应用程序需要使用一个对象时,不再是由程序员写的应用程序通过new关键字来直接创建该对象,而是由SpringIoC容器来创建和管理,即创建和管理对象的控制权由应用程序转移到IoC容器。我们的
认识Spring IoC容器和组件
Mr_Zerone
SpringFramework spring java 后端
1.传统Web项目开发流程传统Web项目在实现业务流程时,往往需要将Controller/Service/Dao,这三层先分别创建一个全局属性,上图中用BookController/BookService/BookDao来具体说明。当浏览器发送过来请求时,我们先调用全局属性中的BookCotroller对象bookController,在bookController中引用全局属性中的BookSer
【k8s应用管理】kubernetes HPA+rancher
Karoku066
kubernetes rancher 容器 运维 云原生
文章目录KubernetesHPA部署指南概述部署metrics-server部署HPARancher管理Kubernetes集群指南实验环境安装及配置RancherKubernetesHPA部署指南概述KubernetesHPA(HorizontalPodAutoscaling)可以根据Pod的CPU利用率自动调整Deployment、ReplicationController或ReplicaS
前端504错误分析
ox0080
# 北漂+滴滴出行 Web VIP 激励 前端
前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案:1.确认错误来源504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端→代理服务器→后端服务,问题通常出在代理与后端之间。2.排查步骤(1)检查后端服务状态确认服务是否运行:通过日志或监控工具(如systemctlstatus,KubernetesPod
Fastgpt本地或服务器私有化部署常见问题
泰山AI
AI大模型应用开发 fastgpt rag llm
一、错误排查方式遇到问题先按下面方式排查。dockerps-a查看所有容器运行状态,检查是否全部running,如有异常,尝试dockerlogs容器名查看对应日志。容器都运行正常的,dockerlogs容器名查看报错日志带有requestId的,都是OneAPI提示错误,大部分都是因为模型接口报错。无法解决时,可以找找Issue,或新提Issue,私有部署错误,务必提供详细的日志,否则很难排查。
【分布式理论16】分布式调度2:资源划分和调度策略
roman_日积跬步-终至千里
分布式架构 分布式
文章目录一、资源划分:Linux容器的应用1.LXC的Namespace机制:资源隔离2.LXC的CGroup机制:资源管理二、任务与资源如何匹配1.任务队列与资源池2.资源调度策略在分布式系统中,资源的有效分配和调度是确保计算任务高效执行的关键。为了能够合理地利用系统资源并优化计算任务的执行,资源划分和调度策略显得尤为重要。本节将从Linux容器资源划分、资源池与任务队列的匹配,以及不同的调度策
高并发系统架构设计全链路指南
power-辰南
java技术架构师成长专栏 系统架构 分布式 高并发 springcloud
第一章:架构优化核心目标:提升系统高并发&高可用能力,优化架构,提高吞吐量。1.1微服务高可用优化解决问题:微服务可能存在单点故障、扩展性差、调用效率低等问题。1.1.1服务无状态化目的:让服务实例可以随时扩缩容、快速恢复,避免单点故障。可能的问题现象影响本地存储Session,导致用户粘连某个实例实例挂掉后,用户重新登录订单等业务逻辑依赖本地缓存容器扩缩时数据丢失静态文件(Excel/图片)存本
js动画html标签(持续更新中)
843977358
html js 动画 media opacity
1.jQuery 效果 - animate() 方法 改变 "div" 元素的高度: $(".btn1").click(function(){ $("#box").animate({height:"300px
springMVC学习笔记
caoyong
springMVC
1、搭建开发环境
a>、添加jar文件,在ioc所需jar包的基础上添加spring-web.jar,spring-webmvc.jar
b>、在web.xml中配置前端控制器
<servlet>
&nbs
POI中设置Excel单元格格式
107x
poi style 列宽 合并单元格 自动换行
引用:http://apps.hi.baidu.com/share/detail/17249059
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
先获取工作薄对象:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCellStyle setBorder = wb.
jquery 获取A href 触发js方法的this参数 无效的情况
一炮送你回车库
jquery
html如下:
<td class=\"bord-r-n bord-l-n c-333\">
<a class=\"table-icon edit\" onclick=\"editTrValues(this);\">修改</a>
</td>"
j
md5
3213213333332132
MD5
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MDFive {
public static void main(String[] args) {
String md5Str = "cq
完全卸载干净Oracle11g
sophia天雪
orale数据库 卸载干净 清理注册表
完全卸载干净Oracle11g
A、存在OUI卸载工具的情况下:
第一步:停用所有Oracle相关的已启动的服务;
第二步:找到OUI卸载工具:在“开始”菜单中找到“oracle_OraDb11g_home”文件夹中
&
apache 的access.log 日志文件太大如何解决
darkranger
apache
CustomLog logs/access.log common 此写法导致日志数据一致自增变大。
直接注释上面的语法
#CustomLog logs/access.log common
增加:
CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-d.log
Hadoop单机模式环境搭建关键步骤
aijuans
分布式
Hadoop环境需要sshd服务一直开启,故,在服务器上需要按照ssh服务,以Ubuntu Linux为例,按照ssh服务如下:
sudo apt-get install ssh
sudo apt-get install rsync
编辑HADOOP_HOME/conf/hadoop-env.sh文件,将JAVA_HOME设置为Java
PL/SQL DEVELOPER 使用的一些技巧
atongyeye
java sql
1 记住密码
这是个有争议的功能,因为记住密码会给带来数据安全的问题。 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Developer记住密码。 位置:Tools菜单--Preferences--Oracle--Logon HIstory--Store with password
2 特殊Copy
在SQL Window
PHP:在对象上动态添加一个新的方法
bardo
方法 动态添加 闭包
有关在一个对象上动态添加方法,如果你来自Ruby语言或您熟悉这门语言,你已经知道它是什么...... Ruby提供给你一种方式来获得一个instancied对象,并给这个对象添加一个额外的方法。
好!不说Ruby了,让我们来谈谈PHP
PHP未提供一个“标准的方式”做这样的事情,这也是没有核心的一部分...
但无论如何,它并没有说我们不能做这样
ThreadLocal与线程安全
bijian1013
java java多线程 threadLocal
首先来看一下线程安全问题产生的两个前提条件:
1.数据共享,多个线程访问同样的数据。
2.共享数据是可变的,多个线程对访问的共享数据作出了修改。
实例:
定义一个共享数据:
public static int a = 0;
Tomcat 架包冲突解决
征客丶
tomcat Web
环境:
Tomcat 7.0.6
win7 x64
错误表象:【我的冲突的架包是:catalina.jar 与 tomcat-catalina-7.0.61.jar 冲突,不知道其他架包冲突时是不是也报这个错误】
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.dep
【Scala三】分析Spark源代码总结的Scala语法一
bit1129
scala
Scala语法 1. classOf运算符
Scala中的classOf[T]是一个class对象,等价于Java的T.class,比如classOf[TextInputFormat]等价于TextInputFormat.class
2. 方法默认值
defaultMinPartitions就是一个默认值,类似C++的方法默认值
java 线程池管理机制
BlueSkator
java线程池 管理机制
编辑
Add
Tools
jdk线程池
一、引言
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
关于hql中使用本地sql函数的问题(问-答)
BreakingBad
HQL 存储函数
转自于:http://www.iteye.com/problems/23775
问:
我在开发过程中,使用hql进行查询(mysql5)使用到了mysql自带的函数find_in_set()这个函数作为匹配字符串的来讲效率非常好,但是我直接把它写在hql语句里面(from ForumMemberInfo fm,ForumArea fa where find_in_set(fm.userId,f
读《研磨设计模式》-代码笔记-迭代器模式-Iterator
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.Arrays;
import java.util.List;
/**
* Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示
*
* 个人觉得,为了不暴露该
常用SQL
chenjunt3
oracle sql C++ c C#
--NC建库
CREATE TABLESPACE NNC_DATA01 DATAFILE 'E:\oracle\product\10.2.0\oradata\orcl\nnc_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
CREATE TABLESPA
数学是科学技术的语言
comsci
工作 活动 领域模型
从小学到大学都在学习数学,从小学开始了解数字的概念和背诵九九表到大学学习复变函数和离散数学,看起来好像掌握了这些数学知识,但是在工作中却很少真正用到这些知识,为什么?
最近在研究一种开源软件-CARROT2的源代码的时候,又一次感觉到数学在计算机技术中的不可动摇的基础作用,CARROT2是一种用于自动语言分类(聚类)的工具性软件,用JAVA语言编写,它
Linux系统手动安装rzsz 软件包
daizj
linux sz rz
1、下载软件 rzsz-3.34.tar.gz。登录linux,用命令
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。
2、解压 tar zxvf rzsz-3.34.tar.gz
3、安装 cd rzsz-3.34 ; make posix 。注意:这个软件安装与常规的GNU软件不
读源码之:ArrayBlockingQueue
dieslrae
java
ArrayBlockingQueue是concurrent包提供的一个线程安全的队列,由一个数组来保存队列元素.通过
takeIndex和
putIndex来分别记录出队列和入队列的下标,以保证在出队列时
不进行元素移动.
//在出队列或者入队列的时候对takeIndex或者putIndex进行累加,如果已经到了数组末尾就又从0开始,保证数
C语言学习九枚举的定义和应用
dcj3sjt126com
c
枚举的定义
# include <stdio.h>
enum WeekDay
{
MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturDay, SunDay
};
int main(void)
{
//int day; //day定义成int类型不合适
enum WeekDay day = Wedne
Vagrant 三种网络配置详解
dcj3sjt126com
vagrant
Forwarded port
Private network
Public network
Vagrant 中一共有三种网络配置,下面我们将会详解三种网络配置各自优缺点。
端口映射(Forwarded port),顾名思义是指把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。Vagrantfile中设定语法为:
c
16.性能优化-完结
frank1234
性能优化
性能调优是一个宏大的工程,需要从宏观架构(比如拆分,冗余,读写分离,集群,缓存等), 软件设计(比如多线程并行化,选择合适的数据结构), 数据库设计层面(合理的表设计,汇总表,索引,分区,拆分,冗余等) 以及微观(软件的配置,SQL语句的编写,操作系统配置等)根据软件的应用场景做综合的考虑和权衡,并经验实际测试验证才能达到最优。
性能水很深, 笔者经验尚浅 ,赶脚也就了解了点皮毛而已,我觉得
Word Search
hcx2013
search
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or ve
Spring4新特性——Web开发的增强
jinnianshilongnian
spring spring mvc spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装配置tengine并设置开机启动
liuxingguome
centos
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
Ubuntu上可以这样安装
sudo aptitude install libdmalloc-dev libcurl4-opens
第14章 工具函数(上)
onestopweb
函数
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
Xelsius 2008 and SAP BW at a glance
blueoxygen
BO Xelsius
Xelsius提供了丰富多样的数据连接方式,其中为SAP BW专属提供的是BICS。那么Xelsius的各种连接的优缺点比较以及Xelsius是如何直接连接到BEx Query的呢? 以下Wiki文章应该提供了全面的概览。
http://wiki.sdn.sap.com/wiki/display/BOBJ/Xcelsius+2008+and+SAP+NetWeaver+BW+Co
oracle表空间相关
tongsh6
oracle
在oracle数据库中,一个用户对应一个表空间,当表空间不足时,可以采用增加表空间的数据文件容量,也可以增加数据文件,方法有如下几种:
1.给表空间增加数据文件
ALTER TABLESPACE "表空间的名字" ADD DATAFILE
'表空间的数据文件路径' SIZE 50M;
&nb
.Net framework4.0安装失败
yangjuanjava
.net windows
上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了
和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了!
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=17113
方法:
1.运行cmd,输入net stop WuAuServ
2.点击开