首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页标签kubernetes

#kubernetes

Kubernetes是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。

怎么使用 tke 里 cos 做 volumn pv?

horanhe

腾讯 | 研发 (已认证)

我是程序员
已采纳

我也遇到类似的问题,指定 cos 作为 pv 之后文件无法写入到 cos 存储桶

混沌工程是如何提升 Kubernetes 集群高可用性的?

如何进行 Kubernetes 集群的高可用架构设计?

kubectl top node 和 pod 在安装prometheus后异常,请问解决办法是什么?

kubernetes ingress controller 选择哪一种具体的api网关来支撑微服务呢?

在 Kubernetes 中,Ingress Controller 是用于处理外部访问集群内服务的流量的组件。为了支撑微服务,您可以选择以下几种常见的 API 网关: 1. **Nginx Ingress Controller**:这是一个流行的开源 Ingress Controller,基于 Nginx 反向代理服务器实现。它提供了灵活的配置选项和丰富的功能,如负载均衡、SSL/TLS 终止、URL 重写等。对于大多数场景,Nginx Ingress Controller 是一个很好的选择。 2. **Traefik Ingress Controller**:另一个流行的开源 Ingress Controller,基于 Traefik 代理服务器实现。Traefik 具有自动服务发现和动态配置的特点,非常适合微服务架构。 3. **Istio Gateway**:Istio 是一个开源的服务网格平台,提供了强大的流量管理功能。Istio Gateway 可以作为 Ingress Controller 使用,提供高级的网络功能,如金丝雀发布、蓝绿部署、流量拆分等。如果您已经在使用 Istio,那么选择 Istio Gateway 是一个不错的选择。 4. **腾讯云负载均衡器CLB**:腾讯云提供了具有负载均衡功能的CLB(Cloud Load Balancer)服务,可以搭配腾讯云Kubernetes引擎(TKE)使用,为集群提供高可用、高性能的API网关服务。 在选择 API 网关时,请根据您的需求、集群规模以及您对功能和支持的需求进行权衡。如果您正在使用腾讯云,可以考虑使用腾讯云负载均衡器CLB作为您的API网关。... 展开详请

k8s如何获取ingress-nginx真实的客户端IP?

什么是Kubernetes

Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它具备自动装箱、服务发现、扩展等功能。Kubernetes可以有效地管理和协调容器之间的负载,提高应用程序的稳定性和可用性。 例如,一个基于Kubernetes的应用程序可能由多个容器组成,这些容器在不同的服务器上运行。Kubernetes可以自动将这些容器组合成一个集群,并确保它们能够相互协调工作。当应用程序需要扩展时,Kubernetes可以自动增加容器数量,以处理更多的负载。当某个容器出现故障时,Kubernetes可以自动将其替换,以保持应用程序的可用性。 腾讯云Kubernetes引擎(TKE)是一个基于Kubernetes的企业级容器编排平台,提供了一键部署、容器管理、自动化扩缩容、监控告警等功能。用户可以快速部署和管理容器化应用程序,无需关注底层基础设施的管理。... 展开详请

什么是 Kubernetes

Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它具备自动装箱、服务发现、扩展等功能。Kubernetes 可以有效地管理和协调庞大的容器集群,让开发者更专注于应用程序的开发,而不需要担心底层的基础设施问题。 以下是一个关于 Kubernetes 的基本示例: 假设您有一个基于微服务的电子商务应用程序,其中包括订单管理、用户管理和商品管理等服务。使用 Kubernetes,您可以将每个服务部署为独立的容器,然后使用 Kubernetes 的自动装箱功能来确保容器在集群中的节点上均匀分布。当应用程序需要扩展以处理更多负载时,Kubernetes 可以自动创建新的容器来平衡负载。此外,Kubernetes 的服务发现功能可以让您方便地访问各个服务,而无需担心它们在集群中的具体位置。 腾讯云容器服务(TKE)是一个基于 Kubernetes 的容器编排平台,支持自动化部署、管理和扩展容器化应用程序。它提供了企业级的安全性和可访问性,并且可以轻松地集成腾讯云的其他云服务。通过腾讯云容器服务,您可以轻松部署和管理您的 Kubernetes 集群,并开始体验 Kubernetes 带来的好处。... 展开详请

什么是Kubernetes?

Kubernetes是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它具备自动装箱、服务发现、扩展等功能。通过使用Kubernetes,用户可以简化容器管理,提高应用程序的可靠性和可用性。 例如,用户可以使用Kubernetes部署一个基于微服务的应用程序,并将其容器分布到多个集群节点以实现高可用性。当应用程序的需要增加时,Kubernetes能够自动扩展以满足新的需求,当某个容器出现故障时,Kubernetes可以自动重新部署容器并重新分配网络流量,确保服务始终可用。 腾讯云提供了一站式的Kubernetes服务TKE(Tencent Kubernetes Engine),支持用户在云端快速部署和管理Kubernetes集群,同时还提供了一系列丰富的附加功能,如监控、日志聚合、网络插件等,使得用户能够更方便地管理Kubernetes集群。... 展开详请

Docker与Kubernetes的关系是什么

Docker和Kubernetes是两种在容器化应用部署和管理中常常配合使用的工具。Docker是一个容器化引擎,能轻松创建、部署和管理容器,容器中可运行应用程序及其依赖项。Kubernetes是一个容器编排平台,用于自动化部署、扩展和管理容器化应用程序。 它们之间的关系可以这样理解:Docker为Kubernetes提供了一种快速创建和管理容器的方法,而Kubernetes则负责在这些容器上运行和管理应用程序。实际上,Kubernetes可以管理和协调Docker以及其他容器技术(如rkt和containerd)提供的容器。 腾讯云提供了Docker和Kubernetes的对应产品,包括腾讯云Docker服务和腾讯云Kubernetes引擎服务(TKE)。... 展开详请

Docker和Kubernetes在容器管理方面有哪些区别

Docker 是一个开源的容器技术,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而实现快速、可预测的部署。Docker主要关注的是容器的创建、运行和管理。 Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了一套功能强大的API和命令行工具,使开发者和系统管理员能够轻松地管理跨多个主机的容器。Kubernetes 主要关注的是容器之间的协同工作和容器编排。 两者之间的主要区别在于: 1. 两者的关注点不同:Docker主要关注容器的创建和管理,而Kubernetes则关注多个容器之间的协同工作和容器编排。 2. 基于Docker的Kubernetes能够实现对Docker容器的自动部署、管理和扩展,而Docker本身并没有提供这些高级功能,需要手动执行相关操作。 以腾讯云为例,腾讯云提供了云容器服务(TKE)和云容器引擎(TKE-C),它们分别基于Docker和Kubernetes技术,可以帮助用户轻松部署和管理容器化应用。... 展开详请

如何构建基于 Kubernetes 的企业应用云平台

构建基于Kubernetes的企业应用云平台需要规划、设计和实施多个组件和服务。以下是构建企业级Kubernetes云平台的一些建议和步骤: 需求分析:首先,分析企业的需求,了解应用程序的类型、性能要求、安全性要求等。这将帮助你确定Kubernetes平台的架构和组件。 选择Kubernetes发行版:有多种Kubernetes发行版可供选择,例如原生Kubernetes、OpenShift、Rancher等。根据企业需求和资源选择合适的发行版。 基础设施规划:规划Kubernetes集群的基础设施,包括计算、存储和网络资源。你可以选择在本地数据中心、公有云或混合云环境中部署Kubernetes集群。 集群部署:部署Kubernetes集群,确保所有节点和控制平面组件正常运行。你可以使用Kubeadm、Kops、Terraform等工具进行部署。 网络插件:选择合适的网络插件,如Calico、Flannel、Cilium等,以实现Kubernetes集群中的容器网络。 存储解决方案:为Kubernetes集群选择合适的存储解决方案,如Ceph、GlusterFS、NFS等,以满足企业应用的持久化存储需求。 集群安全:确保Kubernetes集群的安全性,包括使用RBAC(基于角色的访问控制)进行权限管理、为API通信启用TLS、使用网络策略限制容器间通信等。 日志和监控:部署日志和监控解决方案,如Prometheus、Grafana、ELK Stack(Elasticsearch、Logstash、Kibana)等,以实时监控集群性能和应用程序状态。 CI/CD集成:将Kubernetes集群与现有的持续集成/持续部署(CI/CD)流程集成,以实现自动化的应用程序构建、测试和部署。可以使用Jenkins、GitLab CI、Argo CD等工具。 应用部署:使用Kubernetes原生的部署方法(如Deployment、StatefulSet等)部署企业应用,确保应用程序能够在Kubernetes集群中正常运行。 服务发现和负载均衡:使用Kubernetes的Service和Ingress资源实现服务发现和负载均衡,以确保应用程序的可访问性和高可用性。你可以使用内置的Kubernetes服务,或者使用像Istio这样的服务网格来增强这些功能。 自动扩缩容:使用Kubernetes的Horizontal Pod Autoscaler(HPA)或者Kubernetes Metrics Server来实现应用的自动扩缩容,以便根据负载变化动态调整资源。 备份和恢复:实施备份和恢复策略,以防止数据丢失。可以使用像Velero这样的工具来备份Kubernetes集群和应用数据。 多租户管理:如果需要,可以实现多租户管理,为不同的用户或团队提供隔离的Kubernetes环境。可以使用Kubernetes的Namespace功能,或者使用像Rancher这样的多集群管理平台。 持续优化:在部署和运行应用的过程中,持续收集和分析性能数据,优化集群配置和应用性能。 培训和支持:为开发者和运维人员提供Kubernetes的培训和支持,帮助他们更好地使用和管理Kubernetes平台。 以上就是构建基于Kubernetes的企业应用云平台的一些基本步骤和建议。需要注意的是,每个企业的具体情况和需求可能会有所不同,因此在实施过程中可能需要进行一些调整和优化。 ... 展开详请
构建基于Kubernetes的企业应用云平台需要规划、设计和实施多个组件和服务。以下是构建企业级Kubernetes云平台的一些建议和步骤: 需求分析:首先,分析企业的需求,了解应用程序的类型、性能要求、安全性要求等。这将帮助你确定Kubernetes平台的架构和组件。 选择Kubernetes发行版:有多种Kubernetes发行版可供选择,例如原生Kubernetes、OpenShift、Rancher等。根据企业需求和资源选择合适的发行版。 基础设施规划:规划Kubernetes集群的基础设施,包括计算、存储和网络资源。你可以选择在本地数据中心、公有云或混合云环境中部署Kubernetes集群。 集群部署:部署Kubernetes集群,确保所有节点和控制平面组件正常运行。你可以使用Kubeadm、Kops、Terraform等工具进行部署。 网络插件:选择合适的网络插件,如Calico、Flannel、Cilium等,以实现Kubernetes集群中的容器网络。 存储解决方案:为Kubernetes集群选择合适的存储解决方案,如Ceph、GlusterFS、NFS等,以满足企业应用的持久化存储需求。 集群安全:确保Kubernetes集群的安全性,包括使用RBAC(基于角色的访问控制)进行权限管理、为API通信启用TLS、使用网络策略限制容器间通信等。 日志和监控:部署日志和监控解决方案,如Prometheus、Grafana、ELK Stack(Elasticsearch、Logstash、Kibana)等,以实时监控集群性能和应用程序状态。 CI/CD集成:将Kubernetes集群与现有的持续集成/持续部署(CI/CD)流程集成,以实现自动化的应用程序构建、测试和部署。可以使用Jenkins、GitLab CI、Argo CD等工具。 应用部署:使用Kubernetes原生的部署方法(如Deployment、StatefulSet等)部署企业应用,确保应用程序能够在Kubernetes集群中正常运行。 服务发现和负载均衡:使用Kubernetes的Service和Ingress资源实现服务发现和负载均衡,以确保应用程序的可访问性和高可用性。你可以使用内置的Kubernetes服务,或者使用像Istio这样的服务网格来增强这些功能。 自动扩缩容:使用Kubernetes的Horizontal Pod Autoscaler(HPA)或者Kubernetes Metrics Server来实现应用的自动扩缩容,以便根据负载变化动态调整资源。 备份和恢复:实施备份和恢复策略,以防止数据丢失。可以使用像Velero这样的工具来备份Kubernetes集群和应用数据。 多租户管理:如果需要,可以实现多租户管理,为不同的用户或团队提供隔离的Kubernetes环境。可以使用Kubernetes的Namespace功能,或者使用像Rancher这样的多集群管理平台。 持续优化:在部署和运行应用的过程中,持续收集和分析性能数据,优化集群配置和应用性能。 培训和支持:为开发者和运维人员提供Kubernetes的培训和支持,帮助他们更好地使用和管理Kubernetes平台。 以上就是构建基于Kubernetes的企业应用云平台的一些基本步骤和建议。需要注意的是,每个企业的具体情况和需求可能会有所不同,因此在实施过程中可能需要进行一些调整和优化。

Kubernetes部署zipkin结合elasticsearch配置后无法连上elasticsearch,怎么处理?

首先,我们需要确保您已经正确地部署了Kubernetes集群,并且已经安装了Zipkin和Elasticsearch。接下来,我们将检查一些可能导致无法连接Elasticsearch的原因,并提供解决方案。 1. 确保Elasticsearch服务已经启动并运行。您可以使用以下命令检查Elasticsearch服务的状态: ``` kubectl get pods -n<namespace> ``` 将`<namespace>`替换为您部署Elasticsearch的命名空间。如果Elasticsearch服务未启动,请检查您的部署配置并确保已正确配置。 2. 确保Zipkin和Elasticsearch之间的网络连接正常。您可以使用以下命令检查两个服务之间的网络连接: ``` kubectl exec -it <zipkin-pod> -n<namespace> -- curl <elasticsearch-service-url> ``` 将`<zipkin-pod>`替换为Zipkin服务的Pod名称,将`<namespace>`替换为您部署Zipkin的命名空间,将`<elasticsearch-service-url>`替换为Elasticsearch服务的URL。如果您收到了响应,那么网络连接是正常的。 3. 检查Zipkin的配置文件,确保它正确地指向了Elasticsearch服务。您可以使用以下命令查看Zipkin的配置文件: ``` kubectl exec -it <zipkin-pod> -n<namespace> -- cat /path/to/zipkin/config/file ``` 将`<zipkin-pod>`替换为Zipkin服务的Pod名称,将`<namespace>`替换为您部署Zipkin的命名空间,将`/path/to/zipkin/config/file`替换为您的配置文件的路径。确保配置文件中的Elasticsearch服务URL正确无误。 4. 如果以上步骤都无法解决问题,您可以尝试查看Zipkin和Elasticsearch的日志,以获取更多关于连接失败的详细信息。您可以使用以下命令查看日志: ``` kubectl logs <pod-name> -n<namespace> ``` 将`<pod-name>`替换为Zipkin或Elasticsearch服务的Pod名称,将`<namespace>`替换为您部署这些服务的命名空间。 如果您仍然无法解决问题,请提供更多关于您的部署配置和错误信息的详细信息,以便我们能够更好地帮助您。... 展开详请
首先,我们需要确保您已经正确地部署了Kubernetes集群,并且已经安装了Zipkin和Elasticsearch。接下来,我们将检查一些可能导致无法连接Elasticsearch的原因,并提供解决方案。 1. 确保Elasticsearch服务已经启动并运行。您可以使用以下命令检查Elasticsearch服务的状态: ``` kubectl get pods -n<namespace> ``` 将`<namespace>`替换为您部署Elasticsearch的命名空间。如果Elasticsearch服务未启动,请检查您的部署配置并确保已正确配置。 2. 确保Zipkin和Elasticsearch之间的网络连接正常。您可以使用以下命令检查两个服务之间的网络连接: ``` kubectl exec -it <zipkin-pod> -n<namespace> -- curl <elasticsearch-service-url> ``` 将`<zipkin-pod>`替换为Zipkin服务的Pod名称,将`<namespace>`替换为您部署Zipkin的命名空间,将`<elasticsearch-service-url>`替换为Elasticsearch服务的URL。如果您收到了响应,那么网络连接是正常的。 3. 检查Zipkin的配置文件,确保它正确地指向了Elasticsearch服务。您可以使用以下命令查看Zipkin的配置文件: ``` kubectl exec -it <zipkin-pod> -n<namespace> -- cat /path/to/zipkin/config/file ``` 将`<zipkin-pod>`替换为Zipkin服务的Pod名称,将`<namespace>`替换为您部署Zipkin的命名空间,将`/path/to/zipkin/config/file`替换为您的配置文件的路径。确保配置文件中的Elasticsearch服务URL正确无误。 4. 如果以上步骤都无法解决问题,您可以尝试查看Zipkin和Elasticsearch的日志,以获取更多关于连接失败的详细信息。您可以使用以下命令查看日志: ``` kubectl logs <pod-name> -n<namespace> ``` 将`<pod-name>`替换为Zipkin或Elasticsearch服务的Pod名称,将`<namespace>`替换为您部署这些服务的命名空间。 如果您仍然无法解决问题,请提供更多关于您的部署配置和错误信息的详细信息,以便我们能够更好地帮助您。

kubernetes集群测试方案及工具?

opencv人脸识别调优?

在不固定IP的机器上部署k8s,怎么做?

K3S搭建有问题,执行命令错误怎么解决?

RokasYang

腾讯科技 | 网络技术服务专家 (已认证)

我不是很懂网络,但也不是完全不懂,我稍微懂一点点。
1.第一条命令报错,你通过awk取出IP了,再将取出的IP交给shell执行,shell肯定一脸懵逼给你返回命令未找到; 2.第二条命令下载文件失败,测试了下这个域名解析到国外地址的,你服务器又是国内的,偶尔不稳很正常,多试几次,而且这个脚本只是单纯返回了Download Failed,并没有给出具体原因,建议你先wget这个失败的URL能不能正常拉取回来;如果你有脚本能力就更好办了,去里面找Download Failed的前后文,让它尽量把整个拉去文件的过程输出到屏幕上,清晰看到失败原因是什么,或者直接通过任何方式拉去后上传到机器,去脚本里面注释这条拉取的命令。 3.第三条命令又是语法问题,ping 后面请接域名或者IP,不要接URL地址,拿三层协议ICMP去探测七层的URL地址,怎么可能不报错?... 展开详请

如何在CentOS上创建Kubernetes集群?

土子美互联网从业者
系统环境 kubeadm支持多种系统,这里简单介绍一下需要的系统要求: Ubuntu16.04+ / Debian 9 / CentOS 7 / RHEL 7 / Fedora 25/26(best-effort) / HypriotOS v1.0.1+ / Other 2GB或者以上的RAM(否则将没有足够空间留给app) 2核以上CPU 集群的机器之间必须能通过网络互相通信 SWAP必须被关闭,否则kubelet会出错! 具体的详细信息可以在官方网站上看到。 本篇内容基于aws的ap-northeast-1的ec2, CentOS7的操作系统(ami-4dd5522b),实例类型t2.medium 2核4GB,3台机器,1 master,2 nodes,kubernetes 1.9 版本。为了方便起见,在安全组里面打开了所有的端口和IP访问。 机器配置: [centos@ip-172-31-24-49 ~]$ uname -a Linux ip-172-31-24-49.ap-northeast-1.compute.internal 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 首先 ,我们关闭selinux: $ sudo vim /etc/sysconfig/selinux 📷 把SELINUX改成disabled,然后保存退出。 在我用的ami中,swap是默认关闭的,所以不需要我手动关闭,大家需要确认 自己的环境中swap是否有关闭掉,否则会在之后的环节中出问题。 为了方便我们安装,我们将sshd设置为keepalive: $ sudo -i $ echo "ClientAliveInterval 10" >> /etc/ssh/sshd_config $ echo "TCPKeepAlive yes" >> /etc/ssh/sshd_config $ systemctl restart sshd.service 接下来我们重启一下机器: $ sudo sync $ sudo reboot 至此,准备阶段结束。 安装kubeadm 首先,我们需要在所有机器上都安装 docker, kubeadm, kubelet和 kubectl。 切记:kubeadm不会自动去安装和管理 kubelet和kubectl,所以需要自己去确保安装的版本和你想要安装的kubernetes版本相同。 安装 docker: $ sudo yum install -y docker $ sudo systemctl enable docker && sudo systemctl start docker 在RHEL/CentOS 7 系统上可能会路由失败,我们需要设置一下: $ sudo -i $ cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sudo sysctl --system 接下来我们需要安装 kubeadm, kubelet和 kubectl了,我们需要先加一个repo: $ cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF 然后安装: $ sudo yum install -y kubelet kubeadm kubectl $ sudo systemctl enable kubelet && sudo systemctl start kubelet 至此,在所有机器上安装所需的软件已经结束。 使用kubeadm初始化master 安装完所有的依赖之后,我们就可以用 kubeadm初始化master了。 最简单的初始化方法是: $ kubeadm init 除此之外, kubeadm还支持多种方法来配置,具体可以查看一下官方文档。 我们在初始化的时候指定一下kubernetes版本,并设置一下pod-network-cidr(后面的flannel会用到): $ sudo -i $ kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16 在这个过程中 kubeadm执行了一系列的操作,包括一些pre-check,生成ca证书,安装etcd和其它控制组件等。 界面差不多如下: 📷 最下面的这行 kubeadm join什么的,就是用来让别的node加入集群的,可以看出非常方便。我们要保存好这一行东西,这是我们之后让node加入集群的凭据,一会儿会用到。 这个时候,我们还不能通过 kubectl来控制集群,要让 kubectl可用,我们需要做: # 对于非root用户 $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config # 对于root用户 $ export KUBECONFIG=/etc/kubernetes/admin.conf # 也可以直接放到~/.bash_profile $ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 接下来要注意,我们必须自己来安装一个network addon。 network addon必须在任何app部署之前安装好。同样的,kube-dns也会在network addon安装好之后才启动。kubeadm只支持CNI-based networks(不支持kubenet)。 比较常见的network addon有: Calico, Canal, Flannel, Kube-router, Romana, WeaveNet等。这里我们使用 Flannel。 $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml 安装完network之后,你可以通过 kubectlgetpods--all-namespaces来查看 kube-dns是否在running来判断network是否安装成功。 默认情况下,为了保证master的安全,master是不会被调度到app的。你可以取消这个限制通过输入: $ kubectl taint nodes --all node-role.kubernetes.io/master- 加入nodes 终于部署完了我们的master! 现在我们开始加入一些node到我们的集群里面吧! ssh到我们的node节点上,执行刚才下面给出的那个 kubeadm join的命令(每个人不同): $ sudo -i $ kubeadm join --token 72a8a4.2ed9076cd668b8b7 172.31.31.60:6443 --discovery-token-ca-cert-hash sha256:f0894e55d475f882dd40d52c6d01f758017ec5729be632294049f687330f60d2 输出差不多如下图: 📷 这时候,我们去master上输入 kubectlgetnodes查看一下: [root@i-071abd86ed304dc84 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION i-071abd86ed304dc84 Ready master 12m v1.9.0 i-0c559ad3c0b16fd36 Ready <none> 1m v1.9.0 i-0f3f7462b0a004b5e Ready <none> 47s v1.9.0... 展开详请
系统环境 kubeadm支持多种系统,这里简单介绍一下需要的系统要求: Ubuntu16.04+ / Debian 9 / CentOS 7 / RHEL 7 / Fedora 25/26(best-effort) / HypriotOS v1.0.1+ / Other 2GB或者以上的RAM(否则将没有足够空间留给app) 2核以上CPU 集群的机器之间必须能通过网络互相通信 SWAP必须被关闭,否则kubelet会出错! 具体的详细信息可以在官方网站上看到。 本篇内容基于aws的ap-northeast-1的ec2, CentOS7的操作系统(ami-4dd5522b),实例类型t2.medium 2核4GB,3台机器,1 master,2 nodes,kubernetes 1.9 版本。为了方便起见,在安全组里面打开了所有的端口和IP访问。 机器配置: [centos@ip-172-31-24-49 ~]$ uname -a Linux ip-172-31-24-49.ap-northeast-1.compute.internal 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 首先 ,我们关闭selinux: $ sudo vim /etc/sysconfig/selinux 📷 把SELINUX改成disabled,然后保存退出。 在我用的ami中,swap是默认关闭的,所以不需要我手动关闭,大家需要确认 自己的环境中swap是否有关闭掉,否则会在之后的环节中出问题。 为了方便我们安装,我们将sshd设置为keepalive: $ sudo -i $ echo "ClientAliveInterval 10" >> /etc/ssh/sshd_config $ echo "TCPKeepAlive yes" >> /etc/ssh/sshd_config $ systemctl restart sshd.service 接下来我们重启一下机器: $ sudo sync $ sudo reboot 至此,准备阶段结束。 安装kubeadm 首先,我们需要在所有机器上都安装 docker, kubeadm, kubelet和 kubectl。 切记:kubeadm不会自动去安装和管理 kubelet和kubectl,所以需要自己去确保安装的版本和你想要安装的kubernetes版本相同。 安装 docker: $ sudo yum install -y docker $ sudo systemctl enable docker && sudo systemctl start docker 在RHEL/CentOS 7 系统上可能会路由失败,我们需要设置一下: $ sudo -i $ cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sudo sysctl --system 接下来我们需要安装 kubeadm, kubelet和 kubectl了,我们需要先加一个repo: $ cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF 然后安装: $ sudo yum install -y kubelet kubeadm kubectl $ sudo systemctl enable kubelet && sudo systemctl start kubelet 至此,在所有机器上安装所需的软件已经结束。 使用kubeadm初始化master 安装完所有的依赖之后,我们就可以用 kubeadm初始化master了。 最简单的初始化方法是: $ kubeadm init 除此之外, kubeadm还支持多种方法来配置,具体可以查看一下官方文档。 我们在初始化的时候指定一下kubernetes版本,并设置一下pod-network-cidr(后面的flannel会用到): $ sudo -i $ kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16 在这个过程中 kubeadm执行了一系列的操作,包括一些pre-check,生成ca证书,安装etcd和其它控制组件等。 界面差不多如下: 📷 最下面的这行 kubeadm join什么的,就是用来让别的node加入集群的,可以看出非常方便。我们要保存好这一行东西,这是我们之后让node加入集群的凭据,一会儿会用到。 这个时候,我们还不能通过 kubectl来控制集群,要让 kubectl可用,我们需要做: # 对于非root用户 $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config # 对于root用户 $ export KUBECONFIG=/etc/kubernetes/admin.conf # 也可以直接放到~/.bash_profile $ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 接下来要注意,我们必须自己来安装一个network addon。 network addon必须在任何app部署之前安装好。同样的,kube-dns也会在network addon安装好之后才启动。kubeadm只支持CNI-based networks(不支持kubenet)。 比较常见的network addon有: Calico, Canal, Flannel, Kube-router, Romana, WeaveNet等。这里我们使用 Flannel。 $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml 安装完network之后,你可以通过 kubectlgetpods--all-namespaces来查看 kube-dns是否在running来判断network是否安装成功。 默认情况下,为了保证master的安全,master是不会被调度到app的。你可以取消这个限制通过输入: $ kubectl taint nodes --all node-role.kubernetes.io/master- 加入nodes 终于部署完了我们的master! 现在我们开始加入一些node到我们的集群里面吧! ssh到我们的node节点上,执行刚才下面给出的那个 kubeadm join的命令(每个人不同): $ sudo -i $ kubeadm join --token 72a8a4.2ed9076cd668b8b7 172.31.31.60:6443 --discovery-token-ca-cert-hash sha256:f0894e55d475f882dd40d52c6d01f758017ec5729be632294049f687330f60d2 输出差不多如下图: 📷 这时候,我们去master上输入 kubectlgetnodes查看一下: [root@i-071abd86ed304dc84 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION i-071abd86ed304dc84 Ready master 12m v1.9.0 i-0c559ad3c0b16fd36 Ready <none> 1m v1.9.0 i-0f3f7462b0a004b5e Ready <none> 47s v1.9.0

k8s节点ip修改后,kubectl命令无法执行,怎么修改proxy 的configmap?

使用了k8spacket和grafana node graph api插件来可视化集群内tcp流量?

领券