精选列表

搜索[K8s],共3897篇文章
优秀的个人博客,低调大师

Kubernetes(K8S)集群管理Docker容器(部署篇)

一、架构拓扑图 二、环境规划 角色 IP 组件 master 192.168.0.211 etcd kube-apiserver kube-controller-manager kube-scheduler node01 192.168.0.212 kubelet kube-proxy docker node02 192.168.0.213 kubelet kube-proxy docker 环境说明: 操作系统:Ubuntu16.04 or CentOS7 Kubernetes版本:v1.8.3 Docker版本:v17.09-ce 均采用当前最新稳定版本。 关闭selinux。 三、部署集群 3.1下载二进制包 打开下面网址,下载下面两个红色框框的包。 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v183 下载完成后,上传到服务器: kubernetes-server-linux-amd64.tar.gz上传到master节点。 kubernetes-node-linux-amd64.tar.gz 上传到node节点。 3.2 安装etcd3 1 2 3 4 5 6 7 8 k8s-master #yuminstalletcd–y k8s-master #vi/etc/etcd/etcd.conf ETCD_NAME= "default" ETCD_DATA_DIR= "/var/lib/etcd/default" ETCD_LISTEN_CLIENT_URLS= "http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS=http: //0 .0.0.0:2379 k8s-master #systemctlenableetcd k8s-master #systemctlstartetcd 注意:Ubuntu系统etcd配置文件在/etc/default/etcd。 3.3运行Master节点组件 1 2 3 k8s-master #tarzxvfkubernetes-server-linux-amd64.tar.gz k8s-master #mkdir-p/opt/kubernetes/{bin,cfg} k8s-master #mvkubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl}/opt/kubernetes/bin 3.3.1 apiserver 创建配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #vi/opt/kubernetes/cfg/kube-apiserver #启用日志标准错误 KUBE_LOGTOSTDERR= "--logtostderr=true" #日志级别 KUBE_LOG_LEVEL= "--v=4" #Etcd服务地址 KUBE_ETCD_SERVERS= "--etcd-servers=http://192.168.0.211:2379" #API服务监听地址 KUBE_API_ADDRESS= "--insecure-bind-address=0.0.0.0" #API服务监听端口 KUBE_API_PORT= "--insecure-port=8080" #对集群中成员提供API服务地址 KUBE_ADVERTISE_ADDR= "--advertise-address=192.168.0.211" #允许容器请求特权模式,默认false KUBE_ALLOW_PRIV= "--allow-privileged=false" #集群分配的IP范围 KUBE_SERVICE_ADDRESSES= "--service-cluster-ip-range=10.10.10.0/24" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #vi/lib/systemd/system/kube-apiserver.service [Unit] Description=KubernetesAPIServer Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-apiserver #ExecStart=/opt/kubernetes/bin/kube-apiserver${KUBE_APISERVER_OPTS} ExecStart= /opt/kubernetes/bin/kube-apiserver \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${KUBE_ETCD_SERVERS}\ ${KUBE_API_ADDRESS}\ ${KUBE_API_PORT}\ ${KUBE_ADVERTISE_ADDR}\ ${KUBE_ALLOW_PRIV}\ ${KUBE_SERVICE_ADDRESSES} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-apiserver #systemctlrestartkube-apiserver 注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2 3.3.2 scheduler 创建配置文件: 1 2 3 4 5 #vi/opt/kubernetes/cfg/kube-scheduler KUBE_LOGTOSTDERR= "--logtostderr=true" KUBE_LOG_LEVEL= "--v=4" KUBE_MASTER= "--master=192.168.0.211:8080" KUBE_LEADER_ELECT= "--leader-elect" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #vi/lib/systemd/system/kube-scheduler.service [Unit] Description=KubernetesScheduler Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-scheduler ExecStart= /opt/kubernetes/bin/kube-scheduler \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${KUBE_MASTER}\ ${KUBE_LEADER_ELECT} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-scheduler #systemctlrestartkube-scheduler 3.3.3 controller-manager 创建配置文件: 1 2 3 4 #vi/opt/kubernetes/cfg/kube-controller-manager KUBE_LOGTOSTDERR= "--logtostderr=true" KUBE_LOG_LEVEL= "--v=4" KUBE_MASTER= "--master=192.168.0.211:8080" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #vi/lib/systemd/system/kube-controller-manager.service [Unit] Description=KubernetesControllerManager Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-controller-manager ExecStart= /opt/kubernetes/bin/kube-controller-manager \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${KUBE_MASTER}\ ${KUBE_LEADER_ELECT} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-controller-manager #systemctlrestartkube-controller-manager 3.3.4小结 Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求。 查看Master节点组件进程状态: 说明组件都在运行。 如果启动失败,请查看启动日志,例如: #journalctl -u kube-apiserver 3.4 运行Node节点组件 1 2 3 k8s-node01 #tarzxvfkubernetes-node-linux-amd64.tar.gz k8s-node01 #mkdir-p/opt/kubernetes/{bin,cfg} k8s-node01 #mvkubernetes/node/bin/{kubelet,kube-proxy}/opt/kubernetes/bin/ 3.4.1 kubelet 创建kubeconfig配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 #vi/opt/kubernetes/cfg/kubelet.kubeconfig apiVersion:v1 kind:Config clusters: -cluster: server:http: //192 .168.0.211:8080 name: local contexts: -context: cluster: local name: local current-context: local kubeconfig文件用于kubelet连接master apiserver。 创建配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #vi/opt/kubernetes/cfg/kubelet #启用日志标准错误 KUBE_LOGTOSTDERR= "--logtostderr=true" #日志级别 KUBE_LOG_LEVEL= "--v=4" #Kubelet服务IP地址 NODE_ADDRESS= "--address=192.168.0.212" #Kubelet服务端口 NODE_PORT= "--port=10250" #自定义节点名称 NODE_HOSTNAME= "--hostname-override=192.168.0.212" #kubeconfig路径,指定连接API服务器 KUBELET_KUBECONFIG= "--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig" #允许容器请求特权模式,默认false KUBE_ALLOW_PRIV= "--allow-privileged=false" #DNS信息 KUBELET_DNS_IP= "--cluster-dns=10.10.10.2" KUBELET_DNS_DOMAIN= "--cluster-domain=cluster.local" #禁用使用Swap KUBELET_SWAP= "--fail-swap-on=false" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #vi/lib/systemd/system/kubelet.service [Unit] Description=KubernetesKubelet After=docker.service Requires=docker.service [Service] EnvironmentFile=- /opt/kubernetes/cfg/kubelet ExecStart= /opt/kubernetes/bin/kubelet \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${NODE_ADDRESS}\ ${NODE_PORT}\ ${NODE_HOSTNAME}\ ${KUBELET_KUBECONFIG}\ ${KUBE_ALLOW_PRIV}\ ${KUBELET_DNS_IP}\ ${KUBELET_DNS_DOMAIN}\ ${KUBELET_SWAP} Restart=on-failure KillMode=process [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekubelet #systemctlrestartkubelet 3.4.2 proxy 创建配置文件: 1 2 3 4 5 6 7 8 9 #vi/opt/kubernetes/cfg/kube-proxy #启用日志标准错误 KUBE_LOGTOSTDERR= "--logtostderr=true" #日志级别 KUBE_LOG_LEVEL= "--v=4" #自定义节点名称 NODE_HOSTNAME= "--hostname-override=192.168.0.212" #API服务地址 KUBE_MASTER= "--master=http://192.168.0.211:8080" 创建systemd服务文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #vi/lib/systemd/system/kube-proxy.service [Unit] Description=KubernetesProxy After=network.target [Service] EnvironmentFile=- /opt/kubernetes/cfg/kube-proxy ExecStart= /opt/kubernetes/bin/kube-proxy \ ${KUBE_LOGTOSTDERR}\ ${KUBE_LOG_LEVEL}\ ${NODE_HOSTNAME}\ ${KUBE_MASTER} Restart=on-failure [Install] WantedBy=multi-user.target 启动服务,并设置开机启动: 1 2 3 #systemctldaemon-reload #systemctlenablekube-proxy #systemctlrestartkube-proxy 3.4.3小结 其他节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP。 查看Node节点组件进程状态: 说明组件都在运行。 如果启动失败,请查看启动日志,例如: #journalctl -u kubelet 3.5 验证集群是否部署成功 设置可执行文件到系统变量,方便使用: 1 2 #echo"exportPATH=$PATH:/opt/kubernetes/bin">>/etc/profile #source/etc/profile 查看集群节点状态: 两个节点都加入到了kubernetes集群,就此部署完成。 本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1983392,如需转载请自行联系原作者

优秀的个人博客,低调大师

部署 k8s Cluster(下)- 每天5分钟玩转 Docker 容器技术(119)

上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署。 安装 Pod 网络 要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。 Kubernetes 支持多种网络方案,这里我们先使用 flannel,后面还会讨论 Canal。 执行如下命令部署 flannel: kubectlapply-fhttps://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 添加 k8s-node1 和 k8s-node2 在 k8s-node1 和 k8s-node2 上分别执行如下命令,将其注册到 Cluster 中: kubeadmjoin--tokend38a01.13653e584ccc1980192.168.56.105:6443 这里的--token来自前面kubeadm init输出的第 ⑨ 步提示,如果当时没有记录下来可以通过kubeadm token list查看。 kubeadm join执行如下: 根据提示,我们可以通过kubectl get nodes查看节点的状态。 目前所有节点都是NotReady,这是因为每个节点都需要启动若干组件,这些组件都是在 Pod 中运行,需要首先从 google 下载镜像,我们可以通过如下命令查看 Pod 的状态: kubectlgetpod--all-namespaces Pending、ContainerCreating、ImagePullBackOff都表明 Pod 没有就绪,Running才是就绪状态。我们可以通过kubectl describe pod <Pod Name>查看 Pod 具体情况,比如: kubectldescribepodkube-flannel-ds-v0p3x--namespace=kube-system 为了节省篇幅,这里只截取命令输出的最后部分,可以看到在下载 image 时失败,如果网络质量不好,这种情况是很常见的。我们可以耐心等待,因为 Kubernetes 会重试,我们也可以自己手工执行docker pull去下载这个镜像。 等待一段时间,image 都成功下载后,所有 Pod 会处于Running状态。 这时,所有的节点都已经Ready,Kubernetes Cluster 创建成功,一切准备就绪。 小结 本章通过 kubeadm 部署了三节点的 Kubernetes 集群,后面章节我们都将在这个实验环境中学习 Kubernetes 的各项技术。 本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2060919

优秀的个人博客,低调大师

通过例子理解 k8s 架构 - 每天5分钟玩转 Docker 容器技术(122)

为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的。 执行命令 kubectlrunhttpd-app--image=httpd--replicas=2 等待一段时间,应用部署完成。 Kubernetes 部署了 deploymenthttpd-app,有两个副本 Pod,分别运行在k8s-node1和k8s-node2。 详细讨论整个部署过程。 ① kubectl 发送部署请求到 API Server。 ② API Server 通知 Controller Manager 创建一个 deployment 资源。 ③ Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。 ④ k8s-node1 和 k8s-node2 上的 kubectl 在各自的节点上创建并运行 Pod。 补充两点: 应用的配置和当前状态信息保存在 etcd 中,执行kubectl get pod时 API Server 会从 etcd 中读取这些数据。 flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。 Kubernetes 架构就讨论到这里。从下节开始,我们将通过实践深入学习 Kubernetes 的各种特性。作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用。下节见。 书籍: 1.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html2.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html 本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2063499

优秀的个人博客,低调大师

部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

我们将部署三个节点的 Kubernetes Cluster。 k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node。 所有节点的操作系统均为 Ubuntu 16.04,当然其他 Linux 也是可以的。 官方安装文档可以参考https://kubernetes.io/docs/setup/independent/install-kubeadm/ 注意:Kubernetes 几乎所有的安装组件和 Docker 镜像都放在 goolge 自己的网站上,这对国内的同学可能是个不小的障碍。建议是:网络障碍都必须想办法克服,不然连 Kubernetes 的门都进不了。 安装 Docker 所有节点都需要安装 Docker。 apt-getupdate&&apt-getinstalldocker.io 安装 kubelet、kubeadm 和 kubectl 在所有节点上安装 kubelet、kubeadm 和 kubectl。 kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。 kubeadm 用于初始化 Cluster。 kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。 apt-getupdate&&apt-getinstall-yapt-transport-httpscurl-shttps://packages.cloud.google.com/apt/doc/apt-key.gpg|apt-keyadd-cat<<EOF>/etc/apt/sources.list.d/kubernetes.listdebhttp://apt.kubernetes.io/kubernetes-xenialmainEOFapt-getupdateapt-getinstall-ykubeletkubeadmkubectl 用 kubeadm 创建 Cluster 完整的官方文档可以参考https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/ 初始化 Master 在 Master 上执行如下命令: kubeadminit--apiserver-advertise-address192.168.56.105--pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。 --pod-network-cidr指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对--pod-network-cidr有自己的要求,这里设置为10.244.0.0/16是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。在后面的实践中我们会切换到其他网络方案,比如 Canal。 初始化过程如下: ① kubeadm 执行初始化前的检查。 ② 生成 token 和证书。 ③ 生成 KubeConfig 文件,kubelet 需要这个文件与 Master 通信。 ④ 安装 Master 组件,会从 goolge 的 Registry 下载组件的 Docker 镜像,这一步可能会花一些时间,主要取决于网络质量。 ⑤ 安装附加组件 kube-proxy 和 kube-dns。 ⑥ Kubernetes Master 初始化成功。 ⑦ 提示如何配置 kubectl,后面会实践。 ⑧ 提示如何安装 Pod 网络,后面会实践。 ⑨ 提示如何注册其他节点到 Cluster,后面会实践。 配置 kubectl kubectl 是管理 Kubernetes Cluster 的命令行工具,前面我们已经在所有的节点安装了 kubectl。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。 依照kubeadm init输出的第 ⑦ 步提示,推荐用 Linux 普通用户执行 kubectl(root 会有一些问题)。 我们为 ubuntu 用户配置 kubectl: su - ubuntumkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config 为了使用更便捷,启用 kubectl 命令的自动补全功能。 echo"source<(kubectlcompletionbash)">>~/.bashrc 这样 ubuntu 用户就可以使用 kubectl 了。 下节我们将安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署。 书籍: 1.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html2.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html 本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2060068

优秀的个人博客,低调大师

k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectlrunnginx-deployment--image=nginx:1.7.9--replicas=2 在命令行中通过参数指定资源的属性。 2. 通过配置文件和kubectl apply创建,要完成前面同样的工作,可执行命令: kubectlapply-fnginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML。 下面对这两种方式进行比较。 基于命令的方式: 简单直观快捷,上手快。 适合临时测试或实验。 基于配置文件的方式: 配置文件描述了What,即应用最终要达到的状态。 配置文件提供了创建资源的模板,能够重复部署。 可以像管理代码一样管理部署。 适合正式的、跨环境的、规模化部署。 这种方式要求熟悉配置文件的语法,有一定难度。 后面我们都将采用配置文件的方式,大家需要尽快熟悉和掌握。 kubectl apply不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。不过 Kubernets 还提供了几个类似的命令,例如kubectl create、kubectl replace、kubectl edit和kubectl patch。 为避免造成不必要的困扰,我们会尽量只使用kubectl apply, 此命令已经能够应对超过 90% 的场景,事半功倍。 下节我们来分析一个 Deployment 的配置文件。 书籍: 1.《每天5分钟玩转Docker容器技术》https://item.jd.com/16936307278.html2.《每天5分钟玩转OpenStack》https://item.jd.com/12086376.html 本文转自CloudMan6 51CTO博客,原文链接:http://blog.51cto.com/cloudman/2065285

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。