如何在国内愉快的安装 Kubernetes
如何在国内愉快的安装 Kubernetes
无聊的学习者 发表于6个月前
如何在国内愉快的安装 Kubernetes
  1. 发表于 6个月前
  2. 阅读 8832
  3. 收藏 168
  4. 点赞 4
  5. 评论 20
腾讯云 学生专属云服务套餐 10元起购>>>   
摘要: 无需翻墙,如何愉快的与K8S 玩耍
在国内安装 K8S,一直是大家很头痛的问题,各种翻墙,关键是还不知道需要下载什么工具。蛋疼。而且大部分国内教程要么太老,要么太挫。今天就来告诉大家如何在国内愉快的安装K8S。

安装环境

使用的是 kubeadm 进行安装,过程基本安装官方教程来的。
类目 型号
平台 阿里云 VPC
系统 Centos 7.3
Docker 版本 1.12.6
K8S版本 1.6.*

虽然写的是阿里云 VPC,但是虚拟机也支持。影响不大。
 
节点 作用 数量 推荐配置
Master K8S 的 master 节点(etcd,API,controller。。。。) 1 1核2G
Node 应用节点 2 2核4G
如果仅仅是本地安装玩一玩,都可以配置成1核1G。 接下来的过程,如果有翻墙主机的情况,按照流程走就可以,没有的话直接看下载好的结果就可以了。  

安装过程

安装过程基本包括下载软件,下载镜像,主机配置,启动 Master 节点,配置网络,启动 Node 节点。

下载软件

这个步骤有翻墙能力的人可以直接按照步骤来,没有的话可以使用我打包好的1.6.2软件包。 首先在自己的翻墙的主机配置K8S源。 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 配置好后,下载软件包 yum install -y -downloadonly kubelet kubeadm kubectl kubernetes-cni  将下载好的所有 RPM 打包,发回到本地。这样就完成了K8S软件包的下载了。 下载好的 RPM: https://pan.baidu.com/s/1clIpjC cp6h

下载镜像

下载镜像可以直接使用我提供的脚本,前提是要能翻墙,你懂的。我自己也已经下载过一份了。提供给大家使用。 #!/usr/bin/env bash images=( kube-proxy-amd64:v1.6.2 kube-controller-manager-amd64:v1.6.2 kube-apiserver-amd64:v1.6.2 kube-scheduler-amd64:v1.6.2 kubernetes-dashboard-amd64:v1.6.0 k8s-dns-sidecar-amd64:1.14.1 k8s-dns-kube-dns-amd64:1.14.1 k8s-dns-dnsmasq-nanny-amd64:1.14.1 etcd-amd64:3.0.17 pause-amd64:3.0 ) for imageName in ${images[@]} ; do docker pull gcr.io/google_containers/$imageName docker tag gcr.io/google_containers/$imageName registry.cn-beijing.aliyuncs.com/bbt_k8s/$imageName docker push registry.cn-beijing.aliyuncs.com/bbt_k8s/$imageName done quay.io/coreos/flannel:v0.7.0-amd64 docker tag quay.io/coreos/flannel:v0.7.0-amd64 registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64 docker push registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64 关于这个脚本我解释一下。这个脚本是下载常用的镜像,然后回传到国内的源上,可以将registry.cn-beijing.aliyuncs.com/bbt_k8s改成你自己的地址,必须先用docker login 进行登录,否则可能会出现权限认证错误。推荐使用阿里云,网易的服务。如果使用自己的地址,请注意下面的配置,根据自己的情况进行修改,不在累赘了。   镜像版本号说明:
软件 版本 说明 备注
kube-proxy-amd64
kube-controller-manager-amd64
kube-apiserver-amd64
kube-scheduler-amd64
v1.6.2 这几个镜像一般跟着 K8S 的版本走,例如我安装的是 K8S 的1.6.2,那么版本号就是 v1.6.2  
kubernetes-dashboard-amd64 v1.6.0 这个是 K8S 的控制台(虽然并不好用,单但是最起码很适合新手),一般跟着 K8S 的大版本好走,例如我安装 K8S 的1.6.2,大版本是1.6,所以版本号是 v1.6.0  
k8s-dns-sidecar-amd64 k8s-dns-kube-dns-amd64 k8s-dns-dnsmasq-nanny-amd64 1.14.1 这个是 DNS 服务,一般不跟随 K8S 进行升级,具体版本可以参考https://kubernetes.io/docs/getting-started-guides/kubeadm/  
etcd-amd64 3.0.17 这个是 etcd 服务,一般不跟随 K8S 进行升级,具体版本可以参考https://kubernetes.io/docs/getting-started-guides/kubeadm/  
pause-amd64 3.0 一般不跟随 K8S 进行升级,具体版本可以参考https://kubernetes.io/docs/getting-started-guides/kubeadm/ 已经很长时间版本都是3.0了。
flannel v0.7.0-amd64 网络组件,我这里使用的flannel,当然也可以使用其它的。具体版本信息参考对应的网络组件,例如flannel是https://github.com/coreos/flannel/tree/master/Documentation  
OK,这些镜像下载完成就 OK 了,没有翻墙工具的,就直接跳过吧。  

主机配置

上面的内容下载好后,我们就可以安装了。

更新系统

没什么可以介绍的。 yum update -y

安装 Docker

K8S 的1.6.x 版本仅仅在 Docker 1.12上测试过,虽然最新版本 Docker 也可以运行,但是不推荐安装最新版本,免得遇到什么问题。 curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh /dev/stdin 1.12.6 安装完成后,禁用 Docker 的更新,禁用方式为,在/etc/yum.conf添加 exclude=docker-engine*

配置 Docker

主要是配置一些加速器,避免自己下载镜像速度太慢。 修改/etc/docker/daemon.json 添加如下内容: { "registry-mirrors": ["https://自己的加速地址"] } 之后就是启动Docker 的服务, systemctl daemon-reload systemctl enable docker systemctl start docker  

修改网络

主要是开启桥接相关支持,这个是 flannel 需要的配置,具体是否需要,看自己的网络组件选择的是什么。 修改/usr/lib/sysctl.d/00-system.conf,将net.bridge.bridge-nf-call-iptables改成1.之后修改当前内核状态 echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables  

安装K8S包

上传RPM 包,到自己的服务器上,然后执行 yum install -y *.rpm 之后开启kubelet的开机启动 systemctl enable kubelet 然后配置 kubelet,修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf成如下文件 [Service] Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true" Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true" Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin" Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local" Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt" Environment="KUBELET_ALIYUN_ARGS=--pod-infra-container-image=registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/pause-amd64:3.0" ExecStart= ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_ALIYUN_ARGS 在这里主要修正2个问题,一个是将 POD 的基础容器修改为我们自己源里面的,另外一个是最新版本的 K8S 的资源管理和 Docker 默认的资源管理方式有冲突,这里把这块给删除了。具体可以参考https://github.com/kubernetes/release/issues/306 然后重新 reload 服务。 systemctl daemon-reload 这样就完成了主机环境的初始化,如果是使用虚拟机,拷贝3份就可以了。如果是实体机,3台都按照这个步骤来一遍就好了。然后为每一台主机根据类型设置好 HostName,K8S会把 HostName 当做主机标识。

启动 Master

配置完主机后,我们就可以启动我们的 Master 节点了,通常 Master 节点推荐2-3个,本地测试我们就简单一些,一个节点就可以了。 export KUBE_REPO_PREFIX="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s" export KUBE_ETCD_IMAGE="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/etcd-amd64:3.0.17" kubeadm init --kubernetes-version=v1.6.2 --pod-network-cidr=10.96.0.0/12 前面2个环境变量配置,是让 kubeadm 初始化的时候,使用我们的镜像源下载镜像。 最后 kubeadm init 是初始化 Master 节点。其中需要配置的参数我说明一下。
参数  意义 备注
--kubernetes-version K8S 的版本号,根据自己下载的镜像和 RPM 版本选择。 我这里使用的1.6.2,所以版本为v1.6.2.
--pod-network-cidr POD 的网络,只要不和主机网络冲突就可以,我这里使用的是10.96.0.0/12 这个和上面/etc/systemd/system/kubelet.service.d/10-kubeadm.conf里面声明的KUBELET_DNS_ARGS挂钩,请一同修改。
执行完毕后,稍等一阵,就完成了。 kubeadm init --kubernetes-version=v1.6.2 --pod-network-cidr=10.96.0.0/12 [kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters. [init] Using Kubernetes version: v1.6.2 [init] Using Authorization mode: RBAC [preflight] Running pre-flight checks [preflight] Starting the kubelet service [certificates] Generated CA certificate and key. [certificates] Generated API server certificate and key. [certificates] API Server serving cert is signed for DNS names [node0 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.61.41] [certificates] Generated API server kubelet client certificate and key. [certificates] Generated service account token signing key and public key. [certificates] Generated front-proxy CA certificate and key. [certificates] Generated front-proxy client certificate and key. [certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki" [kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf" [kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf" [kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf" [kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf" [apiclient] Created API client, waiting for the control plane to become ready [apiclient] All control plane components are healthy after 14.583864 seconds [apiclient] Waiting for at least one node to register [apiclient] First node has registered after 6.008990 seconds [token] Using token: e7986d.e440de5882342711 [apiconfig] Created RBAC rules [addons] Created essential addon: kube-proxy [addons] Created essential addon: kube-dns Your Kubernetes master has initialized successfully! To start using your cluster, you need to run (as a regular user): sudo cp /etc/kubernetes/admin.conf $HOME/ sudo chown $(id -u):$(id -g) $HOME/admin.conf export KUBECONFIG=$HOME/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: http://kubernetes.io/docs/admin/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join --token 1111.1111111111111 *.*.*.*:6443 安装完成后,有一个内容非常重要,查看安装日志,拷贝类似于下面的语句,这条语句用来初始化之后的节点。 kubeadm join --token 11111.11111111111111 *.*.*.*:6443   接下来我们就可以去看看我们 K8S 的状态。我这使用的是 Mac。 Linux 和 Windows 的同学自行处理。 安装 kubectl brew install kubectl 然后拷贝 Master 节点上的/etc/kubernetes/admin.conf文件到本机的~/.kube/config 之后执行kebectl get node。我这里已经安装完毕了,所以有全部信息,只要能看到节点,就算是成功了。

安装网络组件

接下来我们安装网络组件,我这里使用的是flannel。创建2个文件 kube-flannel-rbac.yml # Create the clusterrole and clusterrolebinding: # $ kubectl create -f kube-flannel-rbac.yml # Create the pod using the same namespace used by the flannel serviceaccount: # $ kubectl create --namespace kube-system -f kube-flannel.yml --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: flannel rules: - apiGroups: - "" resources: - pods verbs: - get - apiGroups: - "" resources: - nodes verbs: - list - watch - apiGroups: - "" resources: - nodes/status verbs: - patch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: flannel roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: flannel subjects: - kind: ServiceAccount name: flannel namespace: kube-system kube-flannel-ds.yaml --- apiVersion: v1 kind: ServiceAccount metadata: name: flannel namespace: kube-system --- kind: ConfigMap apiVersion: v1 metadata: name: kube-flannel-cfg namespace: kube-system labels: tier: node app: flannel data: cni-conf.json: | { "name": "cbr0", "type": "flannel", "delegate": { "isDefaultGateway": true } } net-conf.json: | { "Network": "10.96.0.0/12", "Backend": { "Type": "vxlan" } } --- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: kube-flannel-ds namespace: kube-system labels: tier: node app: flannel spec: template: metadata: labels: tier: node app: flannel spec: hostNetwork: true nodeSelector: beta.kubernetes.io/arch: amd64 tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule serviceAccountName: flannel containers: - name: kube-flannel image: registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64 command: [ "/opt/bin/flanneld", "--ip-masq", "--kube-subnet-mgr" ] securityContext: privileged: true env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: - name: run mountPath: /run - name: flannel-cfg mountPath: /etc/kube-flannel/ - name: install-cni image: registry.cn-beijing.aliyuncs.com/bbt_k8s/flannel:v0.7.0-amd64 command: [ "/bin/sh", "-c", "set -e -x; cp -f /etc/kube-flannel/cni-conf.json /etc/cni/net.d/10-flannel.conf; while true; do sleep 3600; done" ] volumeMounts: - name: cni mountPath: /etc/cni/net.d - name: flannel-cfg mountPath: /etc/kube-flannel/ volumes: - name: run hostPath: path: /run - name: cni hostPath: path: /etc/cni/net.d - name: flannel-cfg configMap: name: kube-flannel-cfg 然后使用使用命令进行配置。 kubectl create -f kube-flannel-rbac.yml kubectl create -f kube-flannel-ds.yaml  

启动 Node

分别在2个Node 节点,执行下面的命令。 export KUBE_REPO_PREFIX="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s" export KUBE_ETCD_IMAGE="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/etcd-amd64:3.0.17" kubeadm join --token 1111.111111111111 *.*.*.*:6443 其中 kubeadm join 请参考启动 Master 节点中的内容。  

其它

理论上我们安装到这里,K8S 就已经可以使用了。接下来主要是K8S的 Dashboard 的安装,仅供参考,不一定要安装。

安装 DashBoard 工具

创建文件kubernetes-dashboard.yaml # Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Configuration to deploy release version of the Dashboard UI compatible with # Kubernetes 1.6 (RBAC enabled). # # Example usage: kubectl create -f <this_file> apiVersion: v1 kind: ServiceAccount metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system --- kind: Deployment apiVersion: extensions/v1beta1 metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: kubernetes-dashboard template: metadata: labels: app: kubernetes-dashboard spec: containers: - name: kubernetes-dashboard image: registry.cn-beijing.aliyuncs.com/bbt_k8s/kubernetes-dashboard-amd64:v1.6.0 imagePullPolicy: Always ports: - containerPort: 9090 protocol: TCP args: # Uncomment the following line to manually specify Kubernetes API server Host # If not specified, Dashboard will attempt to auto discover the API server and connect # to it. Uncomment only if the default does not work. # - --apiserver-host=http://my-address:port livenessProbe: httpGet: path: / port: 9090 initialDelaySeconds: 30 timeoutSeconds: 30 serviceAccountName: kubernetes-dashboard # Comment the following tolerations if Dashboard must not be deployed on master tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule --- kind: Service apiVersion: v1 metadata: labels: app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: type: NodePort ports: - port: 80 targetPort: 9090 selector: app: kubernetes-dashboard   创建文件dashboard-rbac.yaml kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: default namespace: kube-system 之后执行 kubectl create -f dashboard-rbac.yml kubectl create -f kubernetes-dashboard.yaml   之后用下面的命令,获取到对应端口号。主要是看 NodePort:        <unset>    31867/TCP这样的内容。然后使用http://NodeIp:NodePort访问就可以了,其中 NodeIp 为 Master 或者 Node 的 IP,NodePort为NodePort的端口。 kubectl describe --namespace kube-system service kubernetes-dashboard   到此,这份安装教程就到这里结束了。最后奉上一份安装后的截图。  
标签: k8s Kubernetes
  1. 打赏
  2. 点赞
  3. 收藏
  4. 分享
共有 人打赏支持
粉丝 14
博文 16
码字总数 8514
评论 (20)
jack_jones
赞一个
得自由
推荐一个免费的梯子,得自由,devpn.info
小黑小别姬
现在用 rancher的多吗?
晒太阳的小猪
作为菜鸟级工程师;我还是喜欢本地源一点点!!!
晒太阳的小猪
作为菜鸟级工程师;我还是喜欢本地源一点点!!!
晒太阳的小猪
作为菜鸟级工程师;我还是喜欢本地源一点点!!!
无聊的学习者

引用来自“小黑小别姬”的评论

现在用 rancher的多吗?
我之前用过 使用的是cettle 但是感觉稳定性欠佳 如果小规模的情况下 可以试试 至于在Rancher 部署k8s也可以 不过不过不是很推荐 有这样的成本 自己手动部署K8S要方便的多 若果论优劣 小规模的话 还是推荐使用rancher
小黑小别姬

引用来自“无聊的学习者”的评论

引用来自“小黑小别姬”的评论

现在用 rancher的多吗?
我之前用过 使用的是cettle 但是感觉稳定性欠佳 如果小规模的情况下 可以试试 至于在Rancher 部署k8s也可以 不过不过不是很推荐 有这样的成本 自己手动部署K8S要方便的多 若果论优劣 小规模的话 还是推荐使用rancher
大哥, 人家叫 Cattle .

你说的这样的成本是哪样的成本 ?
无聊的学习者

引用来自“ak_birdofprey”的评论

作为菜鸟级工程师;我还是喜欢本地源一点点!!!
你值得本地源 是指 rpm的源 还是 docker 的。或者说不用kubeadm 使用手动部署呢? 如果是手动部署 这里面有一些配置还是可以参考的
无聊的学习者

引用来自“小黑小别姬”的评论

引用来自“无聊的学习者”的评论

引用来自“小黑小别姬”的评论

现在用 rancher的多吗?
我之前用过 使用的是cettle 但是感觉稳定性欠佳 如果小规模的情况下 可以试试 至于在Rancher 部署k8s也可以 不过不过不是很推荐 有这样的成本 自己手动部署K8S要方便的多 若果论优劣 小规模的话 还是推荐使用rancher
大哥, 人家叫 Cattle .

你说的这样的成本是哪样的成本 ?
好吧 手机打字 原谅我吧 成本主要是指 我的Rancher 需要一个稳定的ha集群 然后在Rancher 内部的K8S也需要
然后每个节点上 要运行Rancher 和K8S 两种agent 监控也需要同时监控
小黑小别姬

引用来自“无聊的学习者”的评论

引用来自“小黑小别姬”的评论

引用来自“无聊的学习者”的评论

引用来自“小黑小别姬”的评论

现在用 rancher的多吗?
我之前用过 使用的是cettle 但是感觉稳定性欠佳 如果小规模的情况下 可以试试 至于在Rancher 部署k8s也可以 不过不过不是很推荐 有这样的成本 自己手动部署K8S要方便的多 若果论优劣 小规模的话 还是推荐使用rancher
大哥, 人家叫 Cattle .

你说的这样的成本是哪样的成本 ?
好吧 手机打字 原谅我吧 成本主要是指 我的Rancher 需要一个稳定的ha集群 然后在Rancher 内部的K8S也需要
然后每个节点上 要运行Rancher 和K8S 两种agent 监控也需要同时监控
:thumbsup:
晒太阳的小猪

引用来自“无聊的学习者”的评论

引用来自“ak_birdofprey”的评论

作为菜鸟级工程师;我还是喜欢本地源一点点!!!
你值得本地源 是指 rpm的源 还是 docker 的。或者说不用kubeadm 使用手动部署呢? 如果是手动部署 这里面有一些配置还是可以参考的
回复@无聊的学习者 : 本地ISO的组件包。使用apt-get install多舒心滴
無駄
其实我很想知道,这个彩条的命令行提示符是怎么做的
无聊的学习者

引用来自“無駄”的评论

其实我很想知道,这个彩条的命令行提示符是怎么做的
很好 这很清真 oh-my-zsh 的 agnoster 主题 ,安装的时候 注意字体配置
啦啦啦拉拉
你用的这个终端工具叫什么??
炉山假面目
我用香港的一台云主机下载了rpm包和镜像,然后save拉取到本地再load成本地镜像,在初始化的时候还是卡在 [apiclient] Created API client, waiting for the control plane to become ready 这里不动,一步一步照着文章的步骤来操作的,困惑ing
无聊的学习者

引用来自“炉山假面目”的评论

我用香港的一台云主机下载了rpm包和镜像,然后save拉取到本地再load成本地镜像,在初始化的时候还是卡在 [apiclient] Created API client, waiting for the control plane to become ready 这里不动,一步一步照着文章的步骤来操作的,困惑ing
将上面的镜像地址全部更换为: registry.cn-beijing.aliyuncs.com/bbt_k8s
例如:registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s
更换为:registry.cn-beijing.aliyuncs.com/bbt_k8s

原因是我是用的是阿里云的华北 VPC,所以默认使用内网的地址。如果是香港分区,需要使用公网地址。(大规模部署,推荐你自己拉取一份Docker 镜像到香港分区,或者内部私服)

如果还存在这个问题,检查一下你的启动参数和 kubelet 服务配置。

确保启动前,环境变量中存在如下配置,否则会继续从 Google 的服务器上拉取镜像
export KUBE_REPO_PREFIX="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s"
export KUBE_ETCD_IMAGE="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/etcd-amd64:3.0.17"


确保Kubelet 的服务配置中包含:
Environment="KUBELET_ALIYUN_ARGS=--pod-infra-container-image=registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/pause-amd64:3.0"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_ALIYUN_ARGS
炉山假面目

引用来自“炉山假面目”的评论

我用香港的一台云主机下载了rpm包和镜像,然后save拉取到本地再load成本地镜像,在初始化的时候还是卡在 [apiclient] Created API client, waiting for the control plane to become ready 这里不动,一步一步照着文章的步骤来操作的,困惑ing

引用来自“无聊的学习者”的评论

将上面的镜像地址全部更换为: registry.cn-beijing.aliyuncs.com/bbt_k8s
例如:registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s
更换为:registry.cn-beijing.aliyuncs.com/bbt_k8s

原因是我是用的是阿里云的华北 VPC,所以默认使用内网的地址。如果是香港分区,需要使用公网地址。(大规模部署,推荐你自己拉取一份Docker 镜像到香港分区,或者内部私服)

如果还存在这个问题,检查一下你的启动参数和 kubelet 服务配置。

确保启动前,环境变量中存在如下配置,否则会继续从 Google 的服务器上拉取镜像
export KUBE_REPO_PREFIX="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s"
export KUBE_ETCD_IMAGE="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/etcd-amd64:3.0.17"


确保Kubelet 的服务配置中包含:
Environment="KUBELET_ALIYUN_ARGS=--pod-infra-container-image=registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/pause-amd64:3.0"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_ALIYUN_ARGS
大神,请再帮忙分析一下,谢谢!以下为我这边的环境情况。
1. ping自建镜像仓库地址是OK的
[root@K8S-Node02 ~]# ping -c 2 repo.tty.com
PING repo.tty.com (192.168.2.160) 56(84) bytes of data.
64 bytes from repo.tty.com (192.168.2.160): icmp_seq=1 ttl=63 time=0.869 ms
64 bytes from repo.tty.com (192.168.2.160): icmp_seq=2 ttl=63 time=0.419 ms

2. kubeadm配置文件如下
[root@K8S-Node02 ~]# more /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_TITAN_ARGS=--pod-infra-container-image=repo.tty.com/k8s/pause-amd64:3.0"
#Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBE
LET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_TITAN_ARGS

3. docker版本如下
[root@K8S-Node02 ~]# docker version | grep Version
Version: 1.12.6
Version: 1.12.6

4. 环境变量设置如下
[root@K8S-Node02 ~]# env | grep KUBE
KUBE_REPO_PREFIX=repo.tty.com/k8s
KUBE_ETCD_IMAGE=repo.tty.com/k8s/etcd-amd64:3.0.17

5. 从自建镜像仓库下载镜像也是OK的
[root@K8S-Node02 ~]# docker pull repo.tty.com/k8s/kube-apiserver-amd64:v1.6.4
Trying to pull repository repo.tty.com/k8s/kube-apiserver-amd64 ...
sha256:47417d8ca4259a7fd04e725a996271fc39c5d4dfeb562562835f2eb955b49a4a: Pulling from repo.tty.com/k8s/kube-apiserver-amd64
1cae461a1479: Pull complete
a1aa63e834ad: Pull complete
Digest: sha256:47417d8ca4259a7fd04e725a996271fc39c5d4dfeb562562835f2eb955b49a4a
Status: Downloaded newer image for repo.tty.com/k8s/kube-apiserver-amd64:v1.6.4
无聊的学习者

引用来自“炉山假面目”的评论

我用香港的一台云主机下载了rpm包和镜像,然后save拉取到本地再load成本地镜像,在初始化的时候还是卡在 [apiclient] Created API client, waiting for the control plane to become ready 这里不动,一步一步照着文章的步骤来操作的,困惑ing

引用来自“无聊的学习者”的评论

将上面的镜像地址全部更换为: registry.cn-beijing.aliyuncs.com/bbt_k8s
例如:registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s
更换为:registry.cn-beijing.aliyuncs.com/bbt_k8s

原因是我是用的是阿里云的华北 VPC,所以默认使用内网的地址。如果是香港分区,需要使用公网地址。(大规模部署,推荐你自己拉取一份Docker 镜像到香港分区,或者内部私服)

如果还存在这个问题,检查一下你的启动参数和 kubelet 服务配置。

确保启动前,环境变量中存在如下配置,否则会继续从 Google 的服务器上拉取镜像
export KUBE_REPO_PREFIX="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s"
export KUBE_ETCD_IMAGE="registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/etcd-amd64:3.0.17"


确保Kubelet 的服务配置中包含:
Environment="KUBELET_ALIYUN_ARGS=--pod-infra-container-image=registry-vpc.cn-beijing.aliyuncs.com/bbt_k8s/pause-amd64:3.0"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_ALIYUN_ARGS

引用来自“炉山假面目”的评论

大神,请再帮忙分析一下,谢谢!以下为我这边的环境情况。
1. ping自建镜像仓库地址是OK的
[root@K8S-Node02 ~]# ping -c 2 repo.tty.com
PING repo.tty.com (192.168.2.160) 56(84) bytes of data.
64 bytes from repo.tty.com (192.168.2.160): icmp_seq=1 ttl=63 time=0.869 ms
64 bytes from repo.tty.com (192.168.2.160): icmp_seq=2 ttl=63 time=0.419 ms

2. kubeadm配置文件如下
[root@K8S-Node02 ~]# more /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf --require-kubeconfig=true"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_TITAN_ARGS=--pod-infra-container-image=repo.tty.com/k8s/pause-amd64:3.0"
#Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBE
LET_AUTHZ_ARGS $KUBELET_EXTRA_ARGS $KUBELET_TITAN_ARGS

3. docker版本如下
[root@K8S-Node02 ~]# docker version | grep Version
Version: 1.12.6
Version: 1.12.6

4. 环境变量设置如下
[root@K8S-Node02 ~]# env | grep KUBE
KUBE_REPO_PREFIX=repo.tty.com/k8s
KUBE_ETCD_IMAGE=repo.tty.com/k8s/etcd-amd64:3.0.17

5. 从自建镜像仓库下载镜像也是OK的
[root@K8S-Node02 ~]# docker pull repo.tty.com/k8s/kube-apiserver-amd64:v1.6.4
Trying to pull repository repo.tty.com/k8s/kube-apiserver-amd64 ...
sha256:47417d8ca4259a7fd04e725a996271fc39c5d4dfeb562562835f2eb955b49a4a: Pulling from repo.tty.com/k8s/kube-apiserver-amd64
1cae461a1479: Pull complete
a1aa63e834ad: Pull complete
Digest: sha256:47417d8ca4259a7fd04e725a996271fc39c5d4dfeb562562835f2eb955b49a4a
Status: Downloaded newer image for repo.tty.com/k8s/kube-apiserver-amd64:v1.6.4
用的是 Centos 吧 ,你把/var/log/message 的单发给我 我帮你看一下 还有我真的不是大神 就是一个基础的码农
×
无聊的学习者
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额:
利发国际官方网