当前位置: 首页 > news >正文

中山半江红网站建设专业的网络营销公司

中山半江红网站建设,专业的网络营销公司,新媒体运营和ui设计哪个好,免费咨询英文一 、服务发布方式对比 二者主要区别在于#xff1a; 1、部署复杂性#xff1a;传统的服务发布方式通常涉及手动配置 和管理服务器、网络设置、负载均衡等#xff0c;过程相对复 杂且容易出错。相比之下#xff0c;Kubernetes服务发布方式 通过使用容器编排和自动化部署工… 一 、服务发布方式对比 二者主要区别在于 1、部署复杂性传统的服务发布方式通常涉及手动配置 和管理服务器、网络设置、负载均衡等过程相对复 杂且容易出错。相比之下Kubernetes服务发布方式 通过使用容器编排和自动化部署工具简化了部署过程使得服务的创建、部署和管理更加容易和高效。 2、弹性伸缩Kubernetes 具有自动弹性伸缩功能可 以根据实际需求自动增加或减少容器数量以保持服 务的稳定性和性能。传统服务发布方式通常需要手动 调整服务器规模难以实现快速弹性伸缩。 3、容错性Kubernetes 具有内置的容错机制当某个 容器出现故障时Kubernetes 会自动将其从集群中 移除并重新启动一个新的容器。这有助于保持服务 的可用性和稳定性。传统服务发布方式可能无法很好 地处理此类故障导致服务中断。 4、资源利用率Kubernetes 通过容器化技术可以实 现资源的共享和动态分配提高了资源的利用率。传 统服务发布方式可能会因服务器资源的浪费而降低资 源利用率。 5、可维护性Kubernetes 提供了强大的可维护性功 能例如服务发现、配置管理和版本控制等。这些功 能有助于简化服务的维护和升级过程。传统服务发布 方式可能需要更多的手动维护工作且升级过程可能 更加复杂。 6、成本虽然 Kubernetes 需要一定的学习曲线和初始 配置成本但从长远来看其自动化部署、弹性伸缩 和资源优化等功能可以帮助企业节省大量的运维成 本。传统服务发布方式可能需要更多的运维人力和资 源投入。 二、Label 和 Selector Label标签可以对 K8S 的些对象如 Pod 和节点 进行分组通过添加 keyvalue 格式的标签用于区 分同样的资源不同的分组。 Selector标签选择器可以根据资源标签查询出精 确的对象信息。 1、自定义 Label 为某个节点添加标签 Label [rootk8s-master wp]# kubectl label nodes k8s-node01 abc1node/k8s-node01 labeled[rootk8s-master wp]# kubectl get node -l abc1NAME         STATUS   ROLES   AGE   VERSIONk8s-node01   Ready   none   11d   v1.28.2 在 deployment 或其他控制器中指定将 Pod 部署到该 节点 (创建nginx deployment 让他只能部署在node01上) [rootk8s-master wp]# vim nginx-deploy.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:nodeSelector:abc: 1containers:- name: nginximage: docker.io/library/nginx:latestimagePullPolicy: Neverports:- name: nginxportcontainerPort: 80[rootk8s-master wp]# kubectl create -f nginx-deploy.yaml deployment.apps/nginx created[rootk8s-master wp]# kubectl get pod -owideNAME                                 READY   STATUS   RESTARTS     AGE   IP             NODE         NOMINATED NODE   READINESS GATEScluster-test-66bb44bd88-zdfdf         1/1     Running   4 (45m ago)   10d    172.16.85.214   k8s-node01   none           nonemariadb-deployment-55bc54f6f5-kbbzm   1/1     Running   0             107m   172.16.58.215   k8s-node02   none           nonenginx-6bb6dc9958-5b965                1/1     Running   0             55s    172.16.85.219   k8s-node01   none           nonenginx-6bb6dc9958-hx4wg                1/1     Running   0             55s    172.16.85.218   k8s-node01   none           nonenginx-6bb6dc9958-wlhj9                1/1     Running   0             55s    172.16.85.220   k8s-node01   none           none# pod已添加到node01节点上 2、污点信息 # 查看master的污点信息该master为禁调度节点[rootk8s-master wp]# kubectl describe nodes k8s-master | grep TaintsTaints:             node-role.kubernetes.io/control-plane:NoSchedule# 可通过该命令去除master节点的禁调度污点但正常情况下不允许这么做因为master节点是管理node节点的不需要进行负载[rootk8s-master wp]# kubectl taint node k8s-master node-role.kubernetes.io/control-planeerror: at least one taint update is required[rootk8s-master wp]# kubectl taint node k8s-master node-role.kubernetes.io/control-plane:NoScheduleerror: node k8s-master already has node-role.kubernetes.io/control-plane taint(s) with same effect(s) and --overwrite is false 3、为各节点设置 Label # 为master节点设置master角色标签[rootk8s-master wp]# kubectl label nodes k8s-master rolemasternode/k8s-master labeled# 为node节点设置node角色标签[rootk8s-master wp]# kubectl label nodes k8s-node01 k8s-node02 rolenodenode/k8s-node01 labelednode/k8s-node02 labeled 4、Selector 选择器 # 查看所有节点的标签[rootk8s-master wp]# kubectl get nodes --show-labels NAME         STATUS   ROLES           AGE   VERSION   LABELSk8s-master   Ready   control-plane   11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-master,kubernetes.io/oslinux,node-role.kubernetes.io/control-plane,node.kubernetes.io/exclude-from-external-load-balancers,rolemasterk8s-node01   Ready   none         11d   v1.28.2   abc11,beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node01,kubernetes.io/oslinux,rolenodek8s-node02   Ready   none         11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node02,kubernetes.io/oslinux,rolenode# 匹配标签匹配规则role这个key的value在master和node之间[rootk8s-master wp]# kubectl get nodes -l role in (master, node)NAME         STATUS   ROLES           AGE   VERSIONk8s-master   Ready   control-plane   11d   v1.28.2k8s-node01   Ready   none         11d   v1.28.2k8s-node02   Ready   none         11d   v1.28.2# 选择匹配role为master或node且不包括abc1的node[rootk8s-master wp]# kubectl get nodes -l abc!1,role in (master, node)NAME         STATUS   ROLES           AGE   VERSIONk8s-master   Ready   control-plane   11d   v1.28.2k8s-node02   Ready   none         11d   v1.28.2# 匹配标签的key为abc的node[rootk8s-master wp]# kubectl get nodes -l abcNAME         STATUS   ROLES   AGE   VERSIONk8s-node01   Ready   none   11d   v1.28.2 5、修改标签 将 abc1 这个标签改为 abc11直接指定 key 然后使用 --overwrite 参数重写标签 [rootk8s-master wp]# kubectl label nodes k8s-node01 abc11error: abc already has a value (1), and --overwrite is false[rootk8s-master wp]# kubectl label nodes k8s-node01 abc11 --overwrite node/k8s-node01 labeled[rootk8s-master wp]# kubectl get node --show-labelsNAME         STATUS   ROLES           AGE   VERSION   LABELSk8s-master   Ready   control-plane   11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-master,kubernetes.io/oslinux,node-role.kubernetes.io/control-plane,node.kubernetes.io/exclude-from-external-load-balancersk8s-node01   Ready   none         11d   v1.28.2   abc11,beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node01,kubernetes.io/oslinuxk8s-node02   Ready   none         11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node02,kubernetes.io/oslinux[rootk8s-master wp]# kubectl get pod -owideNAME                                 READY   STATUS   RESTARTS     AGE     IP             NODE         NOMINATED NODE   READINESS GATEScluster-test-66bb44bd88-zdfdf         1/1     Running   6 (29m ago)   10d     172.16.85.214   k8s-node01   none           nonemariadb-deployment-55bc54f6f5-kbbzm   1/1     Running   0             3h30m   172.16.58.215   k8s-node02   none           nonenginx-6bb6dc9958-5b965                1/1     Running   0             104m    172.16.85.219   k8s-node01   none           nonenginx-6bb6dc9958-hx4wg                1/1     Running   0             104m    172.16.85.218   k8s-node01   none           nonenginx-6bb6dc9958-wlhj9                1/1     Running   0             104m    172.16.85.220   k8s-node01   none           none[rootk8s-master wp]# kubectl delete -f nginx-deploy.yamldeployment.apps nginx deleted[rootk8s-master wp]# kubectl create -f nginx-deploy.yamldeployment.apps/nginx created# 找不到标签为abc1的node节点就会自动挂起[rootk8s-master wp]# kubectl get pod -owideNAME                                 READY   STATUS   RESTARTS     AGE     IP             NODE         NOMINATED NODE   READINESS GATEScluster-test-66bb44bd88-zdfdf         1/1     Running   6 (30m ago)   10d     172.16.85.214   k8s-node01   none           nonemariadb-deployment-55bc54f6f5-kbbzm   1/1     Running   0             3h31m   172.16.58.215   k8s-node02   none           nonenginx-6bb6dc9958-l4mrm                0/1     Pending   0             2s     none         none       none           nonenginx-6bb6dc9958-mw29p                0/1     Pending   0             2s     none         none       none           nonenginx-6bb6dc9958-v8flb                0/1     Pending   0             2s     none         none       none           none 6、删除标签 删除 node01 的 abc11 的标签 [rootk8s-master wp]# kubectl label nodes k8s-node01 role-node/k8s-node01 unlabeled[rootk8s-master wp]# kubectl get node --show-labels | grep k8s-node01k8s-node01   Ready   none         11d   v1.28.2   abc11,beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node01,kubernetes.io/oslinux[rootk8s-master wp]# kubectl label nodes k8s-node01 abc-node/k8s-node01 unlabeled[rootk8s-master wp]# kubectl get node --show-labels | grep k8s-node01k8s-node01   Ready   none         11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node01,kubernetes.io/oslinux 批量删除标签 # 先为多个节点设定标签[rootk8s-master wp]# kubectl label nodes k8s-master k8s-node01 k8s-node02 typehahanode/k8s-master labelednode/k8s-node01 labelednode/k8s-node02 labeled# 直接让所有node节点删除以type为key的标签[rootk8s-master wp]# kubectl label nodes -l type type-node/k8s-master unlabelednode/k8s-node01 unlabelednode/k8s-node02 unlabeled# 为多个节点设定标签[rootk8s-master wp]# kubectl label nodes k8s-master k8s-node01 k8s-node02 typehahanode/k8s-master labelednode/k8s-node01 labelednode/k8s-node02 labeled# 可以使用for循环删除多个但并非全部节点的标签[rootk8s-master wp]# for i in 01 02;do kubectl label nodes k8s-node$i type-;donenode/k8s-node01 unlabelednode/k8s-node02 unlabeled[rootk8s-master wp]# kubectl get nodes --show-labels NAME         STATUS   ROLES           AGE   VERSION   LABELSk8s-master   Ready   control-plane   11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-master,kubernetes.io/oslinux,node-role.kubernetes.io/control-plane,node.kubernetes.io/exclude-from-external-load-balancers,rolemaster,typehahak8s-node01   Ready   none         11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node01,kubernetes.io/oslinuxk8s-node02   Ready   none         11d   v1.28.2   beta.kubernetes.io/archamd64,beta.kubernetes.io/oslinux,kubernetes.io/archamd64,kubernetes.io/hostnamek8s-node02,kubernetes.io/oslinux 三、Service 1、K8S 的 Service Kubernetesk8s中的 Service 是一种抽象概念它定 义了一种可以访问 Pod 逻辑分组的策略。它通常通过 Label Selector 访问 Pod 组解决了 Pod 的 IP 地址可 能发生变化的问题。 2、定义 Service 需要注意的是Service 能够将一个接收端口映射到任意 的 targetPort但如果 targetPort 为空targetPort 将 被设置为与 Port 字段相同的值。targetPort 可以设置为 一个字符串可引用 backend Pod 的一个端口的名称 这样的话即使更改了 Pod 的端口也不会对 Service 的 访问造成影响。 Kubernetes Service 能够支持 TCP、UDP、STCP 等协 议默认为 TCP 协议。 # 访问server001:80 即可访问到具有 appserver001 标签的 Pod 的80 端口上。[rootk8s-master wp]# vim server001.yamlapiVersion: v1kind: Servicemetadata:name: server001spec:selector:app: server001   # 要匹配的pod标签ports:-       port: 80   # service的端口 protocol: TCP   # 协议targetPort: 80  # 目标容器的端口type: ClusterIP[rootk8s-master wp]# kubectl create -f server001.yaml service/server001 created[rootk8s-master wp]# kubectl get serviceNAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGEkubernetes   ClusterIP   10.96.0.1     none        443/TCP   11dserver001   ClusterIP   10.96.96.142   none        80/TCP   13s[rootk8s-master wp]# curl 10.96.96.142:80curl: (7) Failed connect to 10.96.96.142:80; 拒绝连接 3、创建 Service 1使用service代理pod [rootk8s-master wp]# kubectl run serverpodtest --image docker.io/library/nginx:alpine --image-pull-policy Neverpod/serverpodtest created[rootk8s-master wp]# kubectl label pod serverpodtest appserver001pod/serverpodtest labeled[rootk8s-master wp]# kubectl get pod --show-labels NAME                                 READY   STATUS   RESTARTS     AGE     LABELScluster-test-66bb44bd88-zdfdf         1/1     Running   6 (43m ago)   10d     appcluster-test,pod-template-hash66bb44bd88mariadb-deployment-55bc54f6f5-kbbzm   1/1     Running   0             3h45m   appmariadb,pod-template-hash55bc54f6f5serverpodtest                         1/1     Running   0             114s    appserver001,runserverpodtest[rootk8s-master wp]# curl 10.96.96.142:80!DOCTYPE htmlhtmlheadtitleWelcome to nginx!/titlestylehtml { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }/style/headbodyh1Welcome to nginx!/h1pIf you see this page, the nginx web server is successfully installed andworking. Further configuration is required./p​pFor online documentation and support please refer toa hrefhttp://nginx.org/nginx.org/a.br/Commercial support is available ata hrefhttp://nginx.com/nginx.com/a./p​pemThank you for using nginx./em/p/body/html​ 2使用service代理deployment 重新定义了一个service deployment [rootk8s-master wp]# vim deployment001.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: test000deployment  # deploy资源名称labels:app: test000deployment   # 标签run: abcspec:replicas: 4selector:matchLabels:app: nginxtest   # 配置pod标签template:metadata:labels:app: nginxtestspec:containers:- name: nginximage: docker.io/library/nginx:alpineimagePullPolicy: Neverports:- name: nginxportcontainerPort: 80 service [rootk8s-master wp]# vim service001.yamlapiVersion: v1kind: Servicemetadata:name: nginxtestspec:selector:app: nginxtestports:- port: 80targetPort: 80protocol: TCPtype: ClusterIP 代理测试 [rootk8s-master wp]# kubectl create -f deployment001.yaml[rootk8s-master wp]# kubectl create -f service001.yaml [rootk8s-master wp]# kubectl get poNAME                                 READY   STATUS   RESTARTS     AGEcluster-test-66bb44bd88-zdfdf         1/1     Running   7 (57m ago)   10dmariadb-deployment-55bc54f6f5-kbbzm   1/1     Running   0             4h58mtest000deployment-5496fcbccd-4t87g    1/1     Running   0             9m5stest000deployment-5496fcbccd-bng7r    1/1     Running   0             9m5stest000deployment-5496fcbccd-gmpxm    1/1     Running   0             9m5stest000deployment-5496fcbccd-h2kms    1/1     Running   0             9m5s[rootk8s-master wp]# kubectl get serviceNAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGEkubernetes   ClusterIP   10.96.0.1     none        443/TCP   11dnginxtest   ClusterIP   10.96.99.183   none        80/TCP   2m37s# curl通说明service和pod连接成功# 此时如果删除了pod根据deployment特性会再次建立pod而这时pod的IP地址会发生变化# 但根据k8s的service特性不论后面的pod的IP如何变化只要绑定了对应pod的标签就可以访问到pod[rootk8s-master wp]# curl 10.96.99.183!DOCTYPE htmlhtmlheadtitleWelcome to nginx!/title 4、Service 类型 K8S Service Type服务类型主要包括 ClusterIP在集群内部使用默认值只能从集群中 访问。 NodePort在所有安装了 Kube-Proxy 的节点上打 开一个端口此端口可以代理至后端Pod可以通过 NodePort 从集群外部访问集群内的服务格式为 NodelP:NodePort。 LoadBalancer使用云提供商的负载均衡器公开服 务成本较高。 ExternalName通过返回定义的 CNAME 别名没 有设置任何类型的代理需要1.7 或更高版本kubedns 支持。 5、NodePort 类型 如果将 Service 的 Type 字段设置为 NodePort则 K8S 将从指定范围(默认 30000-32767)内自动分配端口也 可手动指定 NodePort创建该 Service 后集群中的每 个节点都将暴露一个端口通过某个宿主机的 IP端口即 可访问到后端应用。 定义格式如下 [rootk8s-master wp]# vim service001.yaml apiVersion: v1kind: Servicemetadata:name: nginxtestspec:selector:app: nginxtestports:- port: 80targetPort: 80protocol: TCPtype: NodePort 重新加载 yaml [rootk8s-master wp]# kubectl delete -f service001.yaml service nginxtest deleted[rootk8s-master wp]# kubectl create -f service001.yaml service/nginxtest created# 服务的80端口映射到了宿主机的30462端口[rootk8s-master wp]# kubectl get svcNAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)       AGEkubernetes   ClusterIP   10.96.0.1     none        443/TCP       11dnginxtest   NodePort    10.96.70.126   none        80:30462/TCP   6s 宿主机访问测试http://10.0.0.66:30462 修改随机端口为指定端口范围30000-32767 [rootk8s-master wp]# kubectl edit svc nginxtest error: services nginxtest is invalidservice/nginxtest edited 再次访问测试 三个节点都是可以访问的 6、使用 Service 代理 K8S 外部 服务 使用场景 希望在生产环境中使用某个固定的名称而非 IP 地址访 问外部的中间件服务; 希望 Service 指向另一个 Namespace 中或其他集群 中的服务; 正在将工作负载转移到 Kubernetes 集群但是一部 分服务仍运行在 Kubernetes 集群之外的 backend。 外部Service 配置 [rootk8s-master wp]# vim test001ext.yamlapiVersion: v1kind: Servicemetadata:name: test001servicespec:selector:app: extports:-       port: 80targetPort: 80protocol: TCPtype: ClusterIP    # 修改类型为ClusterIP只需要k8s集群访问---apiVersion: v1kind: Endpointsmetadata:name: extlabels:app: extsubsets:-       addresses:-       ip: 10.0.0.99  # 更改为另一台主机的IP这台主机要安装nginx方便测试ports:-       name: nginxport: 80protocol: TCP[rootk8s-master wp]# kubectl create -f test001ext.yaml service/test001service createdendpoints/ext created 四、实战Ingress 搭建 NginxWP 论坛 MariaDB 1、网站架构 本次部署形式完全舍弃 Docker将所有应用都置于 Kubernetes采用 Deployment 而非单 Pod 部署稳 定性得到升级。、 在上次实战环节Nginx 作为反向代理服务器在本次 实战中Nginx 便作为 Ingress Controller。Wordpress 扩容到两个提高可用性。而 MariaDB 因为要保证数据 一致性所以只用一个实例。 2、部署 MariaDB 1定义 ConfigMap # configmap[rootk8s-master aa]# vim mariadb-configmap.yamlapiVersion: v1kind: ConfigMapmetadata:name: mariadb-configmapdata:USER: wpPASSWORD: 123ROOT_PASSWORD: 123DATABASE: db 2定义 Deployment # deployment[rootk8s-master aa]# vim mariadb-deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: mariadb-deploymentlabels:app: mariadb-deploymentspec:replicas: 1selector:matchLabels:app: mariadb-deploymenttemplate:metadata:labels:app: mariadb-deploymentspec:containers:-       name: mariadbimage: docker.io/library/mariadb:latestimagePullPolicy: Neverports:-       name: mariadbportcontainerPort: 3306envFrom:-       prefix: MARIADB_configMapRef:name: mariadb-configmap 3定义 Service # service[rootk8s-master aa]# vim mariadb-service.yamlapiVersion: v1kind: Servicemetadata:name: mariadb-servicespec:selector:app: mariadb-deployment # 指定mariaDB的deployment标签ports:-       port: 3306targetPort: 3306protocol: TCPtype: NodePort 4启动 MariaDB [rootk8s-master aa]# kubectl create -f mariadb-configmap.yaml configmap/mariadb-configmap created[rootk8s-master aa]# kubectl get cmNAME               DATA   AGEkube-root-ca.crt    1     11dmariadb-configmap   4     13m[rootk8s-master aa]# kubectl create -f mariadb-deployment.yaml deployment.apps/mariadb-deployment created[rootk8s-master aa]# kubectl get pod -owideNAME                                 READY   STATUS   RESTARTS     AGE     IP             NODE         NOMINATED NODE   READINESS GATEScluster-test-66bb44bd88-zdfdf         1/1     Running   9 (48m ago)   11d     172.16.85.214   k8s-node01   none           nonemariadb-deployment-5bf6d9f98c-lxlhm   1/1     Running   0             4m47s   172.16.58.221   k8s-node02   none           none[rootk8s-master aa]# mysql -h172.16.58.221 -p123MariaDB [(none)] [rootk8s-master aa]# kubectl create -f mariadb-service.yaml service/mariadb-service created[rootk8s-master aa]# kubectl get svcNAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGEkubernetes       ClusterIP   10.96.0.1       none        443/TCP         11dmariadb-service   NodePort    10.96.247.148   none        3306:30318/TCP   24s 使用测试工具进行测试访问解析域名 [rootk8s-master aa]# kubectl get podNAME                                 READY   STATUS   RESTARTS       AGEcluster-test-66bb44bd88-zdfdf         1/1     Running   10 (105s ago)   11d[rootk8s-master aa]# kubectl exec -it pods/cluster-test-66bb44bd88-zdfdf -- bash(08:44 cluster-test-66bb44bd88-zdfdf:/) nslookup mariadb-serviceServer: 10.96.0.10Address: 10.96.0.10#53​Name: mariadb-service.default.svc.cluster.localAddress: 10.96.247.148 3、部署 Wrodpress 1定义 ConfigMap [rootk8s-master aa]# vim wordpress-configmap.yamlapiVersion: v1kind: ConfigMapmetadata:name: wordpress-configmapdata:NAME: dbUSER: wpPASSWORD: 123HOST: mariadb-service # 将此处写为mariadb的service名称不用再写IP 2定义Deployment [rootk8s-master aa]# vim wordpress-deployment.yaml apiVersion: apps/v1kind: Deploymentmetadata:name: wordpress-deploymentlabels:app: wordpress-deploymentspec:replicas: 2selector:matchLabels:app: wordpress-deploymenttemplate:metadata:labels:app: wordpress-deploymentspec:containers:-       name: wpimage: docker.io/library/wordpress:latestimagePullPolicy: Neverports:-       name: wordpressprotcontainerPort: 80envFrom:-       prefix: WORDPRESS_DB_configMapRef:name: wordpress-configmap 3定义 Service [rootk8s-master aa]# vim wordpress-service.yamlapiVersion: v1kind: Servicemetadata:name: wordpress-servicespec:selector:app: wordpress-deploymentports:-       name: httpport: 80targetPort: 80nodePort: 32000protocol: TCPtype: NodePort 4启动 WordPress [rootk8s-master aa]# kubectl create -f wordpress-configmap.yaml configmap/wordpress-configmap created[rootk8s-master aa]# kubectl get cmNAME                 DATA   AGEkube-root-ca.crt      1     11dmariadb-configmap     4     84mwordpress-configmap   4     1s[rootk8s-master aa]# kubectl create -f wordpress-deployment.yaml deployment.apps/wordpress-deployment created[rootk8s-master aa]# kubectl get deployments.apps NAME                   READY   UP-TO-DATE   AVAILABLE   AGEcluster-test           1/1     1            1           11dmariadb-deployment     1/1     1            1           74mwordpress-deployment   2/2     2            2           2s[rootk8s-master aa]# kubectl create -f wordpress-service.yaml service/wordpress-service created[rootk8s-master aa]# kubectl get svcNAME               TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGEkubernetes         ClusterIP   10.96.0.1       none        443/TCP         12dmariadb-service     NodePort    10.96.247.148   none        3306:30318/TCP   62mwordpress-service   NodePort    10.96.67.149   none        80:32000/TCP     2s 现在就可以做访问网站测试了此时是没有 Ingress 的 4、访问测试 访问 10.0.0.66:32000 五、Ingress 1、Ingress 概念 Ingress 是 Kubernetes 中的一种资源对象用于将外部 流量路由到集群内部的服务。它充当了一个入口 (gateway) 的角色可以根据不同的规则将流量导向到不 同的服务从而实现负载均衡和路由管理。 使用 ingress 可以将多个服务公开给外部网络并进行 灵活的流量控制。通常与 ingress controller如 nginx ingress controller、HAProxy 等一起使用ingress controller 负责实际的流量管理和请求转发操作。 Service 是由 kube-proxy 控制的四层负载均衡端口 IP而 Ingress 是七层负载均衡的 API 对象主机名、 URI、请求头、证书等。 2、Ingress Controller Service 本身是没有服务能力的它只是一些 iptables 规 则真正配置、应用这些规则的实际上是节点里的 kube-proxy 组件。如果没有 kube-proxyService 定义 得再完善也没有用。 Ingress 也只是一些 HTTP 路由规则的集合相当于一份 静态的描述文件真正要把这些规则在集群里实施运 行还需要有另外一个东西这就是 Ingress Controller它的作用就相当于 Service 的 kubeproxy能够读取、应用 Ingress 规则处理、调度流 量。 Nginx 是代理服务器中稳定性最好、性能最高的产品 所以它可以被誉为 Kubernetes 里应用最为广泛的 Ingress Controller。 3、Ingress Class 随着 Ingress 在实践中的大量应用很多用户发现 IngressIngress Controller 这种用法会带来一些问题 比如 由于某些原因项目组需要引入不同的 Ingress Controller但 Kubernetes 不允许这样做。 Ingress 规则太多都交给一个 Ingress Controller 处 理会让它不堪重负。 多个 Ingress 对象没有很好的逻辑分组方式管理和 维护成本很高。 集群里有不同的租户他们对 Ingress 的需求差异很 大甚至有冲突无法部署在同一个 Ingress Controller 上。 而 K8S 提出了一个 Ingress Class 的概念让它插在 Ingress 和 Ingress Controller 中间作为流量规则和控 制器的协调人解除了 Ingress 和 Ingress Controller 的 强绑定关系。 Kubernetes 用户可以转向管理 Ingress Class用它来 定义不同的业务逻辑分组简化 Ingress 规则的复杂 度。 比如说我们可以用 Class A 处理博客流量、Class B 处 理短视频流量、Class C 处理购物流量。 4、部署 Nginx Ingress Controller 1安装 Ingress Controller [rootk8s-master aa]# kubectl create -f ingress.yaml [rootk8s-master aa]# kubectl get pod -n ingress-nginx NAME                                       READY   STATUS     RESTARTS   AGEingress-nginx-admission-create-mp7xv        0/1     Completed   0         21mingress-nginx-admission-patch-922p4         0/1     Completed   0         21mingress-nginx-controller-674f66cf96-6wljn   1/1     Running     0         21m[rootk8s-master aa]# kubectl describe pod -n ingress-nginx ingress-nginx-controller-674f66cf96-6wljnEvents:Type     Reason       Age               From                     Message----     ------       ----               ----                      -------Normal   Scheduled   25m               default-scheduler         Successfully assigned ingress-nginx/ingress-nginx-controller-674f66cf96-6wljn to k8s-node01Warning FailedMount 23m (x8 over 25m) kubelet                   MountVolume.SetUp failed for volume webhook-cert : secret ingress-nginx-admission not foundNormal   Pulling     22m               kubelet                   Pulling image registry.cn-beijing.aliyuncs.com/dotbalo/ingress-nginx-controller:v1.7.1Normal   Pulled       20m               kubelet                   Successfully pulled image registry.cn-beijing.aliyuncs.com/dotbalo/ingress-nginx-controller:v1.7.1 in 2m27.43s (2m27.43s including waiting)Normal   Created     20m               kubelet                   Created container controllerNormal   Started     20m               kubelet                   Started container controllerNormal   RELOAD       20m               nginx-ingress-controller NGINX reload triggered due to a change in configuration[rootk8s-master aa]# kubectl get svc -A | grep ingress-nginxNAMESPACE             NAME                                 TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                     AGEingress-nginx         ingress-nginx-controller             NodePort    10.96.144.127   none        80:30886/TCP,443:31360/TCP   27mingress-nginx         ingress-nginx-controller-admission   ClusterIP   10.96.126.23   none        443/TCP                     27m# 记住ingress-nginx-controller的端口映射8030886 2部署 Ingress [rootk8s-master aa]# vim ingress-001.yaml apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: wp-ingress    # Ingress名称namespace: defaultspec:ingressClassName: nginx   # Controller类型rules:   # 路由规则- host: wp-web.com   # 域名http:paths:- path: /pathType: ImplementationSpecific   # 路径匹配⽅式backend:service:name: wordpress-service   # service名称这里要匹配到wordpress的serviceport:number: 80   # service的端⼝号[rootk8s-master aa]# kubectl create -f ingress-001.yaml ingress.networking.k8s.io/wp-ingress created[rootk8s-master ~]# kubectl get ingressNAME         CLASS   HOSTS       ADDRESS     PORTS   AGEwp-ingress   nginx   wp-web.com   10.0.0.77   80     9h[rootk8s-master aa]# kubectl get podNAME                                   READY   STATUS   RESTARTS       AGEcluster-test-66bb44bd88-zdfdf          1/1     Running   15 (37m ago)   11dmariadb-deployment-5bf6d9f98c-lxlhm    1/1     Running   1 (97m ago)   18hwordpress-deployment-d6cd85444-74848   1/1     Running   1 (97m ago)   16hwordpress-deployment-d6cd85444-hnxxh   1/1     Running   1 (97m ago)   16h[rootk8s-master aa]# kubectl exec -it cluster-test-66bb44bd88-zdfdf -- bash(02:39 cluster-test-66bb44bd88-zdfdf:/) nslookup wordpress-serviceServer: 10.96.0.10Address: 10.96.0.10#53Name: wordpress-service.default.svc.cluster.localAddress: 10.96.67.149[rootk8s-master ~]# kubectl get pod -n ingress-nginxNAME                                       READY   STATUS     RESTARTS     AGEingress-nginx-admission-create-mp7xv        0/1     Completed   0           9hingress-nginx-admission-patch-922p4         0/1     Completed   0           9hingress-nginx-controller-674f66cf96-6wljn   1/1     Running     1 (8h ago)   9h# 修改本机的域名解析 [rootk8s-master aa]# kubectl get service -n ingress-nginx NAME                                 TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                     AGEingress-nginx-controller             NodePort    10.96.144.127   none        80:30886/TCP,443:31360/TCP   57mingress-nginx-controller-admission   ClusterIP   10.96.126.23   none        443/TCP                     57m 遗留问题重启后数据库信息将消失 解决方案持久化保存
http://www.dnsts.com.cn/news/215326.html

相关文章:

  • 佛山网站域名过期嘉兴品牌网站设计
  • 常州网站制作czyzj设计方案审核合格后由谁签字确认
  • wordpress网站迁移教程海口网站关键词优化
  • 个人餐饮网站模板html音乐网页完整代码
  • 自己买域名可以做网站吗发展速度迅猛 具有丰富的网站建设经验
  • 嘉峪关做网站商丘的网络公司
  • 网站分几个阶段建设制作二维码的思维导图
  • 青海建设厅职称网站做郑州的购物网站用什么名
  • 建设网站要什么开企网
  • 网页制作dw软件seo项目培训
  • 安徽制作网站的公司哪家好wordpress 后台 空白
  • 上海嘉定区网站建设合肥电信网站备案
  • php 打开网站wordpress推荐人插件
  • 寿光网站优化centos7更新Wordpress
  • 专业网站 建设公司网站第三方统计工具下载
  • 有什么网站可以做家装口碑好网站建设公司
  • 宝安附近公司做网站建设哪家效益快建筑网站案例
  • 免费做网站方法作作网站
  • 可植入代码网站开发网站建站上海
  • 网站建设有趣名称做公司网站的理念
  • 个人不良信息举报网站网站后台登陆素材
  • 网站建设费可以计业务费吗旅游类网站设计模板下载
  • 四川省广安建设局网站做网站需要了解哪些知识
  • 公司增加英文网站要怎么做广告设计
  • 动态设计用什么软件江西seo
  • 网站建设包含域名网络营销推广的要点及注意事项
  • 网站开发研系统界面设计图
  • 大连购物网站开发网页布局设计说明
  • 微信网站开发rem px江苏网站建设价格
  • 桥头镇仿做网站涉县网站设计