营销网站有哪些,工程建设是什么,商业合作及运营方案,怎么 给自己的网站做优化呢1、namespace
名称空间用来对集群资源进行隔离划分#xff0c;默认只隔离资源#xff0c;不隔离网络k8s默认的名称空间为default
查看k8s的所有命名空间
kubectl get namespace
或者
kubectl get ns
创建名称空间
kubectl create ns 名称
或使用yaml方式 编写yamlkub… 1、namespace
名称空间用来对集群资源进行隔离划分默认只隔离资源不隔离网络k8s默认的名称空间为default
查看k8s的所有命名空间
kubectl get namespace
或者
kubectl get ns
创建名称空间
kubectl create ns 名称
或使用yaml方式 编写yamlkubectl apply -f yaml文件
appVersion: v1
kind: Namespace
metedata:name: hello
appVersion表示版本号kind表示种类说明是名称空间若是pod就是pod类型metedata.name表示名称为hello的名称空间
删除yaml方式创建的名称空间需要这样删除
#可以yaml文件和yaml文件执行的结果这里是删除名称空间
kubectl delete -f yaml文件
删除名称空间
kubectl delete ns 名称
注意以下命令 kubectl get pods -A -AAll表示所有的名称空间这条命令表示获取所有名称空间下的所有pod kubectl get pods 没有指定名称空间那么默认为default空间 kubectl get pods -n kubernetes-dashboard -n-namespace用于指定名称空间这条命令表示获取kubernetes-dashboard空间下的所有pod 2、Pod
运行中的一组容器Pod是kubernetes中应用的最小单位一个Pod可以有一个或多个容器
2.1、命令行创建Pod
kubectl run mynginx --imagenginx
没有指定namespace默认在default下创建的PodmynginxPod的名称--imagenginx使用nginx镜像去构建该Podnginx由于没有指定镜像版本默认使用最新的
删除Pod
kubectl delete pod mynginx
2.2、查看Pod的创建信息
kubectl describe pod pod的名称
会打印Pod的构建信息如Pod的构建event事件
2.3、yaml创建Pod
创建一个pod.yaml文件名任意命名复制一下内容
不知道namespace默认在default下
apiVersion: v1
kind: Pod
metadata:labels:run: mynginxname: mynginx
# namespace: default
spec:containers:- image: nginxname: mynginx
应用yaml
kubectl apply -f pod.yaml 查看构建信息
kubectl describe pod mynginx 删除配置文件创建的pod
kubectl delete -f pod.yaml 2.4、使用可视化dashboard创建pod 把2.3中的代码复制进行 之后k8s在创建pod
2.5、查看pod日志
类似于docker查看容器日志
kubectl logs pod名字
上述默认是查看default名称空间下的pod
指定名称空间获取pod日志
kubectl logs pod名字 -n namespace名字
2.6、日志阻塞式追踪实时更新日志
-n namespace名字缺省则表示查询的是default名称空间
kubectl logs pod名字 -n namespace名字
2.7、获取pod更完善信息
kubectl get pod -o wide -o wide可以写成 -owide上述默认查询的是default名称空间可以使用kubectl get pod -o wide -A获取所有pod 2.8、进入pod
kubectl exec -it pod名字 -- /bin/bash
2.9、pod中运行多个容器
多个容器间端口存在冲突时只会启动第一个容器后面的容器会报端口冲突错误一个pod间的网络、存储空间是共享的容器间可以通过127.0.0.1进行访问
apiVersion: v1
kind: Pod
metadata:labels:run: myappname: myapp
# namespace: default
spec:containers:- image: nginxname: mynginx- image: tomcat8.5.68name: mytomcat3、Deployment
部署控制pod使pod用于多副本、自愈、扩缩容等能力
3.1、创建deployment
语法
kubectl create deployment deployment的名字 --image镜像名称
eg
kubectl create deployment mytomcat --imagetomcat:8.5.68
3.2、删除deployment
语法
kubectl delete deployment deployment的名字
eg
kubectl delete deployment mytomcat
与删除pod的区别
deployment创建的pod可以用pod的删除语句去删除这个pod但是k8s会自动创建下一个pod只有使用删除deployment语句才能彻底删除deployment创建的pod
3.3、多副本
语法 kubectl create deployment deployment的名字 --image镜像名称 --replicaspod的数量 eg
kubectl create deployment mytomcat --imagetomcat:8.5.68 --replicas3
如下图创建了3个pod yaml文件配置方式
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: mytomcatname: mytomcat
spec:replicas: 3selector:matchLabels:app: mytomcattemplate:metadata:labels:app: mytomcatspec:containers:- image: tomcatname: tomcat
3.4、扩缩容
其实就是改变deployment下的pod数量当我们pod在运行期间只有3个需要增加pod数量去支持访问量时这个就称为扩容需要减少pod数量去支持访问量时这个就称为缩容
语法
kubectl scale deployment/deployment的名字 --replicaspod的数量
eg:
kubectl deployment/mytomcat scale --replicas5
3.5、自愈与故障转移
自愈deployment下的pod出现问题k8s会对该pod自动进行重启修复
故障转移当一个pod所在的节点宕机后k8s会把宕机的pod自动拉到其他的node进行运行
3.7、滚动更新
假设deployment下有3个pod这3个pod为同一个镜像应用当该镜像更新时需要对k8s的pod进行更新而滚动更新的作用就是
能保证镜像更新后pod能平滑更新到下一个版本
更新步骤
k8s接收到滚动更新指令启动1个新版本的镜像pod当该pod启动完成后k8s会杀掉3个镜像中的一个pod然后再启动1个新podpod启动完成后再杀掉1个旧pod以此类推直到新pod全部上线旧pod全部下线滚动更新完成
滚动更新只需要一个指令即可执行上述步骤
语法
--record表示记录下这次更新
kubectl set image deployment/deployment的名字 原镜像新镜像 --record
eg
kubectl set image deployment/mytomcat tomcattomcat --record 3.8、命令修改deployment配置
kubectl edit deployment mytomcat #mytomcat为deployment的名字
3.9、版本回退
k8s支持deployment版本回退且回退是滚动更新的过程
回退流程
1查看deployment的版本列表
格式
kubectl rollout history deployment/deployment的名字
eg:
kubectl rollout history deployment/mytomcat CHANGE-CAUSE类似于GIT每次提交的message只是k8s可以不写none在变更deployment的时使用 --record来保存记录参考3.7
2检查当前deployment使用的镜像版本
kubectl get deployment mytomcat -oyaml
或者
kubectl get deployment mytomcat -oyaml | grep tomcat
tomcat的镜像为tomcat最新版镜像 3查看某个版本的yaml详情
kubectl rollout history deployment/mytomcat --revision1 --revision历史版本的编号
或者直接查看镜像
kubectl rollout history deployment/mytomcat --revision1 | grep image 4版本回退 #回退到上次版本 kubectl rollout undo deployment/mytomcat #回退到指定版本 kubectl rollout undo deployment/mytomcat --to-revision1 3.10、工作负载
除了Deploymentk8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。我们都称为 工作负载。有状态应用使用 StatefulSet 部署无状态应用使用 Deployment 部署 官方文档https://kubernetes.io/zh/docs/concepts/workloads/controllers/ 4、Service
服务将一组 Pods 公开为网络服务的抽象方法。Pod的服务发现与负载均衡服务发现指的是能感知同一组pod的上线下线变更与注册中心一样该暴露出来的IP或域名只能集群内部访问不能外部访问Service的默认域名为服务名.所在名称空间.svc如mytomcat.default.svc 不使用service时存在的问题 当一个项目需要启动多个pod每个pod的IP是不同的假设我们通过某一个pod的IP去访问项目若该pod宕机后我们需要手动切换pod的IP虽然可以使用nginx的负载均衡去实现切换但是无状态pod的IP是会改变的除非每次去变更nginx的配置当一个项目存在多个pod时我们只能去连接某一个pod并不能把所有的pod的资源使用起来 Service解决的问题 把相同标签的一组pod暴露成一个统一访问的服务我们只需要访问service即可访问标签中的所有pod负载均衡的方式 4.1、暴露Service命令
kubectl expose deploy deployment的名字 --port指定暴露的端口 --target-portpod中需要暴露的端口
--port指定暴露的端口外部访问时的端口--target-portpod中需要暴露的端口一般为pod中应用的端口
eg把mytomcat的deployment中pod的8080端口暴露给service服务8000端口
kubectl expose deploy mytomcat --port8000 --target-port8080
4.2、获取k8s下的service列表
kubectl get svc -A
或者
kubectl get svc 4.3、yaml方式生成Service
apiVersion: v1
kind: Service
metadata:labels:app:mytomcatname: mytomcat
spec:selector:app: mytomcat #pod的标签ports:- port: 8000protocol: TCPtargetPort: 8080
selector.apppod的标签label用于给pod分类的pod的标签若不指定一般默认为deployment的名字
4.4、获取pod的标签
kubectl get pod --show-labels 4.5、Service暴露方式
默认方式clusterIP 集群IP访问 kubectl expose deployment mytomcat --port8000 --target-port8080
等同于
kubectl expose deployment mytomcat --port8000 --target-port8080 --typeClusterIP
yaml方式
apiVersion: v1
kind: Service
metadata:labels:app: mytomcatname: mytomcat
spec:ports:- port: 8000protocol: TCPtargetPort: 8080selector:app: mytomcattype: ClusterIP #NodePort集群外访问
NodePort暴露方式 kubectl expose deployment mytomcat --port8000 --target-port8080 --typeNodePort k8s会自动生成一个提供外部访问的端口 NodePort范围在 30000-32767 之间 访问方式集群任意node节点端口即可访问Service
如http://111.230.19.178:31634/ 5、上述网络访问总结
1、节点与节点直接是否能正常通信的判断缘由
kubectl get node -owide
node节点加入k8s是外网IP证明节点间的通信是没有问题的就是确保node节点以外网的方式接入的 2、pod的IP访问范围
一般除了搭建k8s时生成的pod使用机器外网IP或master节点的IP外其余在k8s集群搭建好的基础上生成的pod会使用master初始化时pod-network-cidr的网络范围需要确保calico的网段与之一致pod-network-cidr的网络范围指的是k8s给pod分配的IP地址的范围这个IP只能集群内部访问这里的集群内部是指K8S内pod互相访问而不是k8s节点进行访问节点访问pod的IP不属于集群内的访问 3、Service暴露方式访问的范围
以clusterIP暴露方式的访问范围指的是集群内的访问不是k8s节点进行访问
kubectl expose deployment mytomcat --port8000 --target-port8080
以NodePort暴露方式的访问范围
kubectl expose deploy mynginx --port8000 --target-port80 --typeNodePort 因为calico问题我现在只能在mynginx的工作节点才能访问上述service的IP
如下在我的k8s-node1中访问 浏览器使用k8s-node1的IP家31522端口