文档章节

如何在国内愉快的安装 Kubernetes

无聊的学习者
 无聊的学习者
发布于 2017/05/09 11:35
字数 3001
阅读 13181
收藏 169
点赞 5
评论 20

在国内安装 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

 

到此,这份安装教程就到这里结束了。最后奉上一份安装后的截图。

 

© 著作权归作者所有

共有 人打赏支持
无聊的学习者
粉丝 13
博文 17
码字总数 8514
作品 0
青岛
加载中

评论(20)

无聊的学习者
无聊的学习者

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

我用香港的一台云主机下载了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 的单发给我 我帮你看一下 还有我真的不是大神 就是一个基础的码农
炉山假面目
炉山假面目

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

我用香港的一台云主机下载了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
炉山假面目
炉山假面目
我用香港的一台云主机下载了rpm包和镜像,然后save拉取到本地再load成本地镜像,在初始化的时候还是卡在 [apiclient] Created API client, waiting for the control plane to become ready 这里不动,一步一步照着文章的步骤来操作的,困惑ing
啦啦啦拉拉
啦啦啦拉拉
你用的这个终端工具叫什么??
无聊的学习者
无聊的学习者

引用来自“無駄”的评论

其实我很想知道,这个彩条的命令行提示符是怎么做的
很好 这很清真 oh-my-zsh 的 agnoster 主题 ,安装的时候 注意字体配置
無駄
無駄
其实我很想知道,这个彩条的命令行提示符是怎么做的
晒太阳的小猪
晒太阳的小猪

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

引用来自“ak_birdofprey”的评论

作为菜鸟级工程师;我还是喜欢本地源一点点!!!

你值得本地源 是指 rpm的源 还是 docker 的。或者说不用kubeadm 使用手动部署呢? 如果是手动部署 这里面有一些配置还是可以参考的

回复@无聊的学习者 : 本地ISO的组件包。使用apt-get install多舒心滴
小黑小别姬
小黑小别姬

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

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

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

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

现在用 rancher的多吗?

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

你说的这样的成本是哪样的成本 ?

好吧 手机打字 原谅我吧 成本主要是指 我的Rancher 需要一个稳定的ha集群 然后在Rancher 内部的K8S也需要
然后每个节点上 要运行Rancher 和K8S 两种agent 监控也需要同时监控
:thumbsup:
无聊的学习者
无聊的学习者

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

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

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

现在用 rancher的多吗?

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

你说的这样的成本是哪样的成本 ?

好吧 手机打字 原谅我吧 成本主要是指 我的Rancher 需要一个稳定的ha集群 然后在Rancher 内部的K8S也需要
然后每个节点上 要运行Rancher 和K8S 两种agent 监控也需要同时监控
开源技术微讲堂:Kubernetes 系列

Kubernetes (通常称为K8s) 是一个开源系统,它可以被用于自动部署,扩展和管理容器化应用程序,提供跨主机集群的自动部署、扩展以及运行应用程序容器的平台。Kubernetes 以其先进的理念、活跃...

developerWorks中国
2017/12/11
0
0
部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

我们将部署三个节点的 Kubernetes Cluster。 k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node。 所有节点的操作系统均为 Ubuntu 16.04,当然其他 Linux 也是可以的。 官方安装文档可以...

CloudMAN
01/12
0
0
Kubernetes之路 2 - 利用LXCFS提升容器资源可见性

这是本系列的第2篇内容,将介绍在Docker和Kubernetes环境中解决遗留应用无法识别容器资源限制的问题。 Linuxs利用Cgroup实现了对容器的资源限制,但在容器内部依然缺省挂载了宿主机上的的目录...

易立
03/25
0
0
Kubernetes高阶——设计和实现

Kubernetes始于Google 2014 年的一个项目。 Kubernetes的构建基于Google十多年运行大规模负载产品的经验,同时也吸取了社区中最好的意见和经验。 它构建于Docker技术之上,为容器化的应用提供...

m2l0zgssvc7r69efdtj
2017/10/24
0
0
k8s上安装并初始化Helm。minikube

helm简介 Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用。 Helm 采用客户端/服务器架构,有如下组件组成: Helm CLI 是 Helm 客户端,可以在...

xiaomin0322
07/15
0
0
Helm - Kubernetes服务编排的利器

Helm介绍   在Kubernetes中部署容器云应用(容器或微服务编排)是一项有挑战性的工作,Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过Helm能够帮助开发者定义、...

编程玩家
07/15
0
0
Docker宣布拥抱k8s,k8s将一统天下?

Docker官方于DockerCon EU 2017上宣布将在下一个Docker企业版中支持Kubernetes。容器编排之战似乎胜负已分,Kubernetes即将一统天下?容器市场下一步会如何发展? 2017年10月17日,全球瞩目的...

RancherLabs
2017/10/18
0
0
Docker 社区版中 Kubernetes 开启

Docker 社区版从 17.12 版本开始已经提供了对 Kubernetes 的支持。但是由于其安装过程依赖的镜像服务在国内访问很不稳定,很多朋友都无法配置成功。阿里提供了一个简单的工具帮助大家开启 Do...

well
03/07
0
0
Docker宣布拥抱k8s,k8s将一统天下?

Docker官方于DockerCon EU 2017上宣布将在下一个Docker企业版中支持Kubernetes。容器编排之战似乎胜负已分,Kubernetes即将一统天下?容器市场下一步会如何发展? 2017年10月17日,全球瞩目的...

RancherLabs
2017/10/18
0
0
Kubadem方式安装Kubernetes(1.10.0)集群

背景 kubernetes已经是现有的docker容器管理工具中必学的一个架构了,相对与swarm来说,它的架构更重,组件和配置也更复杂,当然了,提供的功能也更加强大。在这里,k8s的基本概念和架构就不...

icenycmh
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周六乱弹 —— 妹子和游戏哪个更好玩

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享唐朝乐队的单曲《国际歌》 《国际歌》- 唐朝乐队 手机党少年们想听歌,请使劲儿戳(这里) @举个栗子- :日常祈雨 邪恶的大祭...

小小编辑
36分钟前
87
4
流利阅读笔记32-20180721待学习

“人工智能”造假:只有人工,没有智能 Lala 2018-07-21 1.今日导读 当今社会,擅长单个方面的人工智能已经盛行,手机借助 AI 智慧防抖技术帮助大家拍出清晰照片,谷歌研发的 AI 助手将可以帮...

aibinxiao
今天
2
0
我的成长记录(一)

今天突然精神抖擞,在我的博客下新开一项分类>成长记录,专门记录每隔一段时间我的一点感悟吧。因为今天才专门花时间新开这样一个分类,所以以前有过的一些感悟没有记录下来,现在已经想不起...

dtqq
今天
0
0
机器学习管理平台 MLFlow

最近工作很忙,博客一直都没有更新。抽时间给大家介绍一下Databrick开源的机器学习管理平台-MLFlow。 谈起Databrick,相信即使是不熟悉机器学习和大数据的工程湿们也都有所了解,它由Spark的...

naughty
今天
0
0
idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部