centos 7インストール指定バージョンdockerとkubeadmインストールkubernetes

17371 ワード

一、事前準備


1.すべてのノードは互いにネットワークを通じており、k 8 s-m 1 SSHが他のノードにログインするのはpasswdlessである.プロセス中にあるノード(k 8 s-m 1)上でSSHで他のノードをコピーし操作することが多いからである.
2、すべてのファイアウォールとSELinuxが閉じていることを確認する.CentOSの場合:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
3、すべてのノードは/etc/hostsを設定してすべてのクラスタホストに解析する必要がある.
4、すべてのノードは以下のシステムパラメータを設定する必要があります.
$ cat < net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
 
$ sysctl -p/etc/sysctl.d/k8s.conf
5、システムSwapをシャットダウンするには、すべてのノードで以下のコマンドでシャットダウンしてください.
$ swapoff -a && sysctl -w vm.swappiness=0
異なるファイルには違いがあります$sed'/swap.img/d' -i/etc/fstab
 

二、dockerのインストール


1、インストールしたDockerを削除する
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

2、yumソースの配置
cd/etc/yum.repo.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum clean
yum makecache
3、Dockerバージョンを表示する:
yum list docker-ce --showduplicates
4、指定バージョンのインストール
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64\
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
dockerの起動
systemctl start docker

三、k 8 sを取り付ける


kubeadmを使用してインストールするには、次の手順に従います.
1.まず各ノードアリK 8 S YUMソースを配置する
cat < /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0

EOF

yum -y install epel-release

yum clean all

yum makecache

 
2.各ノードにkubeadmおよび関連ツールパッケージをインストールします(本明細書では1.10.0バージョンをインストールします).
yum install -y kubelet-1.10.0 kubeadm-1.10.0 kubectl-1.10.0 --disableexcludes=kubernetes

3.クbeletサービスの起動
systemctl enable kubelet && systemctl start kubelet

ヒント:プライマリプロファイルkubeletが欠けているため、kubeletのサービス実行状態は異常です.conf.ただし、Masterノードの初期化が完了した後にこのプロファイルが生成されるため、処理は保留できます.
kubelet構成を変更し、kubelet(すべてのノード)を起動します.
注意:/var/log/messageのログ出力を常に表示すると、kubeletが起動に失敗していることがわかります.
4、編集10-kubeadm.confのファイル、cgroup-driver構成を変更するには:
  • [root@centos7-base-ok]# cat/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_CADVISOR_ARGS=--cadvisor-port=0"
  • Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
  • ExecStart=
  • ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_EXTRA_ARGS

  • 「--cgroup-driver=systems」を「--cgroup-driver=cgroupfs」に変更し、kubeletを再起動します.
    systemctl restart kubelet

    4.K 8 S関連ミラーのダウンロード(Masterノード操作)
    gcrに直接アクセスできないためです.ioはミラーをダウンロードするので、国内のコンテナミラーアクセラレータを構成する必要があります.
    アリクラウドのアクセラレータを構成します.
    ログインhttps://cr.console.aliyun.com/
    ページでミラーアクセラレータボタンを見つけてクリックすると、独自のアクセラレータリンクが表示され、Centosバージョンを選択すると構成方法が表示されます.
    ヒント:アリクラウド上でDockerを使用し、アリクラウドミラーアクセラレータを構成すると、daemonに遭遇する可能性があります.jsonがdocker daemonを起動できない問題は、以下の方法で解決できます.
            
    
    vim /etc/sysconfig/docker 
    
       
    
    OPTIONS='--selinux-enabled --log-driver=journald --registry-mirror=http://xxxx.mirror.aliyuncs.com' 
    registry-mirror          
    
       service docker restart    daemon 
    
       ps aux | grep docker                  。

     
    5.K 8 S関連ミラーをダウンロードする
    OK、アクセラレータの問題を解決した後、k 8 s関連ミラーのダウンロードを開始し、ダウンロード後、ミラー名をk 8 sに変更する.gcr.io/先頭の名前は、kubeadmが使用を識別するために使用されます.
    #!/bin/bash
    images=(kube-proxy-amd64:v1.10.0 kube-scheduler-amd64:v1.10.0 kube-controller-manager-amd64:v1.10.0 kube-apiserver-amd64:v1.10.0
    etcd-amd64:3.1.12 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube-dns-amd64:1.14.8
    k8s-dns-dnsmasq-nanny-amd64:1.14.8)
    for imageName in ${images[@]} ; do
      docker pull keveon/$imageName
      docker tag keveon/$imageName k8s.gcr.io/$imageName
      docker rmi keveon/$imageName
    done

     
    上のshellスクリプトは主に3つのことをして、各種の必要なコンテナミラーをダウンロードして、k 8 sコマンド規範に合致するバージョン名に再マークして、古いコンテナミラーをクリアします.
    ヒント:ミラーバージョンは必ずkubeadmがインストールしたバージョンと一致しなければなりません.そうしないとtime outの問題が発生します.
     
    6.K 8 S Masterの初期化インストール
    上記shellスクリプトを実行し、ダウンロードが完了するまでkubeadm initを実行します.
    [root@k8smaster ~]# kubeadm init --kubernetes-version=v1.10.0 --pod-network-cidr=10.244.0.0/16
    [init] Using Kubernetes version: v1.10.0
    [init] Using Authorization modes: [Node RBAC]
    [preflight] Running pre-flight checks.
    	[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
    	[WARNING FileExisting-crictl]: crictl not found in system path
    Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
    [preflight] Starting the kubelet service
    [certificates] Generated ca certificate and key.
    [certificates] Generated apiserver certificate and key.
    [certificates] apiserver serving cert is signed for DNS names [k8smaster kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.0.100.202]
    [certificates] Generated apiserver-kubelet-client certificate and key.
    [certificates] Generated etcd/ca certificate and key.
    [certificates] Generated etcd/server certificate and key.
    [certificates] etcd/server serving cert is signed for DNS names [localhost] and IPs [127.0.0.1]
    [certificates] Generated etcd/peer certificate and key.
    [certificates] etcd/peer serving cert is signed for DNS names [k8smaster] and IPs [10.0.100.202]
    [certificates] Generated etcd/healthcheck-client certificate and key.
    [certificates] Generated apiserver-etcd-client certificate and key.
    [certificates] Generated sa 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"
    [controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
    [controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
    [controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
    [etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
    [init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests".
    [init] This might take a minute or longer if the control plane images have to be pulled.
    [apiclient] All control plane components are healthy after 21.001790 seconds
    [uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
    [markmaster] Will mark node k8smaster as master by adding a label and a taint
    [markmaster] Master k8smaster tainted and labelled with key/value: node-role.kubernetes.io/master=""
    [bootstraptoken] Using token: thczis.64adx0imeuhu23xv
    [bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
    [bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
    [bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
    [bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
    [addons] Applied essential addon: kube-dns
    [addons] Applied essential addon: kube-proxy
    
    Your Kubernetes master has initialized successfully!
    
    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    You can now join any number of machines by running the following on each node
    as root:
    
      kubeadm join 10.0.100.202:6443 --token thczis.64adx0imeuhu23xv --discovery-token-ca-cert-hash sha256:fa7b11bb569493fd44554aab0afe55a4c051cccc492dbdfafae6efeb6ffa80e6

     
    ヒント:オプション--kubernetes-version=v 1.10.0は必須です.そうしないと、googleサイトの壁にアクセスしてコマンドを実行できません.ここではv 1を用いる.バージョン10.0です.先ほども説明したように、ダウンロードしたコンテナミラーバージョンはK 8 Sバージョンと一致しなければなりません.そうしないとtime outが表示されます.
    上記のコマンドでは、tail-f/var/log/messageログファイルの出力を観察して、構成手順と進捗状況を把握するのに約1分かかります.上の最後のセグメントの出力情報は1部保存され、その後、ワークノードを追加しても使用されます.
     
    7.kubectl認証情報の構成(Masterノード操作)
    #    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

     
    8.flannelネットワークのインストール(Masterノード操作)
    mkdir -p /etc/cni/net.d/
    
    cat < /etc/cni/net.d/10-flannel.conf
    {
    “name”: “cbr0”,
    “type”: “flannel”,
    “delegate”: {
    “isDefaultGateway”: true
    }
    }
    
    EOF
    
    mkdir /usr/share/oci-umount/oci-umount.d -p
    
    mkdir /run/flannel/
    
    cat < /run/flannel/subnet.env
    FLANNEL_NETWORK=10.244.0.0/16
    FLANNEL_SUBNET=10.244.1.0/24
    FLANNEL_MTU=1450
    FLANNEL_IPMASQ=true
    
    EOF
    
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

     
    9.node 1、node 2をクラスタに追加
    Node 1ノードとnode 2ノードでそれぞれkubeadm joinコマンドを実行し、クラスタに参加します.
    [root@k8snode1 ~]# kubeadm join 10.0.100.202:6443 --token thczis.64adx0imeuhu23xv --discovery-token-ca-cert-hash sha256:fa7b11bb569493fd44554aab0afe55a4c051cccc492dbdfafae6efeb6ffa80e6
    [preflight] Running pre-flight checks.
    	[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
    	[WARNING FileExisting-crictl]: crictl not found in system path
    Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
    [discovery] Trying to connect to API Server "10.0.100.202:6443"
    [discovery] Created cluster-info discovery client, requesting info from "https://10.0.100.202:6443"
    [discovery] Requesting info from "https://10.0.100.202:6443" again to validate TLS against the pinned public key
    [discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "10.0.100.202:6443"
    [discovery] Successfully established connection with API Server "10.0.100.202:6443"
    
    This node has joined the cluster:
    * Certificate signing request was sent to master and a response
      was received.
    * The Kubelet was informed of the new secure connection details.
    
    Run 'kubectl get nodes' on the master to see this node join the cluster.

    ヒント:注意深い子供靴は、このコマンドが実は前のK 8 S Matserのインストールに成功した後、私が保存させたコマンドであることを発見するはずです.
    デフォルトでは、Masterノードはワークロードに関与しませんが、All-In-Oneのk 8 s環境をインストールする場合は、Masterノードもノードになるように次のコマンドを実行できます.
    kubectl taint nodes --all node-role.kubernetes.io/master-

     
    10.K 8 S Masterが正常に構築されたかどうかを確認する(Masterノード操作)
    #       
    kubectl get nodes
    
    #   pods  
    kubectl get pods --all-namespaces
    
    #   K8S    
    kubectl get cs

     
    よくあるエラー解析
    インストール時に最もよく見られるのはtime outです.K 8 Sミラーは海外にあるので、事前に彼をダウンロードして、海外の機械でhaborを採用して私有倉庫を作ってミラーをdownloadすることができます.
    [root@k8smaster ~]# kubeadm init
    [init] Using Kubernetes version: v1.10.0
    [init] Using Authorization modes: [Node RBAC]
    [preflight] Running pre-flight checks.
    	[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
    	[WARNING FileExisting-crictl]: crictl not found in system path
    Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
    [preflight] Starting the kubelet service
    [certificates] Generated ca certificate and key.
    [certificates] Generated apiserver certificate and key.
    [certificates] apiserver serving cert is signed for DNS names [k8smaster kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.0.100.202]
    [certificates] Generated apiserver-kubelet-client certificate and key.
    [certificates] Generated etcd/ca certificate and key.
    [certificates] Generated etcd/server certificate and key.
    [certificates] etcd/server serving cert is signed for DNS names [localhost] and IPs [127.0.0.1]
    [certificates] Generated etcd/peer certificate and key.
    [certificates] etcd/peer serving cert is signed for DNS names [k8smaster] and IPs [10.0.100.202]
    [certificates] Generated etcd/healthcheck-client certificate and key.
    [certificates] Generated apiserver-etcd-client certificate and key.
    [certificates] Generated sa 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"
    [controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
    [controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
    [controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
    [etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
    [init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests".
    [init] This might take a minute or longer if the control plane images have to be pulled.
    
    Unfortunately, an error has occurred:
    	timed out waiting for the condition
    
    This error is likely caused by:
    	- The kubelet is not running
    	- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)
    	- Either there is no internet connection, or imagePullPolicy is set to "Never",
    	  so the kubelet cannot pull or find the following control plane images:
    		- k8s.gcr.io/kube-apiserver-amd64:v1.10.0
    		- k8s.gcr.io/kube-controller-manager-amd64:v1.10.0
    		- k8s.gcr.io/kube-scheduler-amd64:v1.10.0
    		- k8s.gcr.io/etcd-amd64:3.1.12 (only if no external etcd endpoints are configured)
    
    If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands:
    	- 'systemctl status kubelet'
    	- 'journalctl -xeu kubelet'
    couldn't initialize a Kubernetes cluster

     
    この問題の大部分は、インストールされているK 8 Sバージョンと依存するK 8 S関連ミラーバージョンが一致していないためであり、この部分のエラーについては/var/log/messageを表示することができます.私たちは、インストールを開始する際に、ログを多く見ることについても言及しました.
     
    また、一部の子供靴は、私はインストールに失敗したと言って、どのように環境を整理して再インストールしますか?次のコマンドを教えます.
    kubeadm reset

     
    これでK 8 S 3ノードクラスタのインストールが完了しました.
     
    参照ドキュメント:
    https://kubernetes.io/docs/setup/independent/install-kubeadm/
    https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
    http://blog.51cto.com/devingeng/2096495?from=singlemessage
    https://blog.csdn.net/zy5757/article/details/77253156?locationNum=2&fps=1
    https://www.kubernetes.org.cn/878.html