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構成を変更するには:
「--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