まず、環境を準備
すべての計画ホスト(1つのマスター、2ノード)が動作することが求められています
1、ファイアウォール、SELinuxを無効にします
[ルート@ノード1〜]#のsystemctl停止firewalld [ルート@ノード1〜]#systemctl無効firewalld [ルート@ノード1〜]#のsetenforce 0 [ルート@ノード1〜]#SED -i " S / SELINUX =施行/ SELINUX =無効/ G "の/ etc /のsysconfig / selinuxを
2、時刻同期サーバ
3、近いスワップ・パーティション(仮プログラム)
[ルート@マスター〜]#するswapoff -a
スワップを閉じるに加えて、あなたもスワップを無視して、kubelet設定を変更することができます
[ルートマスター@〜]#のvimの/ etc /のsysconfig / kubelet KUBELET_EXTRA_ARGS = " --fail・スワップ・オン=偽"
4、ホスト構成
互いのノード、ホストファイルの設定を解決することができます。
5、sshの等価な構成
マスターノードのない濃密ログイン
6、LKM
設定システムのカーネル・パラメータも入力iptablesの/ netfilterのフレーム、ニーズがカーネルモジュールをロードするためのブリッジを流れる可能。
[ルートマスター@〜]#modprobeをbr_netfilter [ルートマスター@〜]#modprobeはip_conntrack [ルートマスター@〜]#エコー -e " net.bridge.bridge-NF-コールのiptables = 1 \ nnet.bridge.bridge-NF -call-ip6tablesを= 1 " >>は/ etc / sysctl.confの [ルート@マスター〜]#sysctlを-p
7、ヤムソース構成(ベース、EPEL、K8S、ドッカー)
[ルート@ノード1〜]#のCDの/ etc / yumを .repos.d / [ルート@ノード1 のyum .repos.d]#ます。mkdir BAK [ルート@ノード1 のyum .repos.d]#mvの * BAK / [ルート@ node1のyumを .repos.d]#wgetの -Oの/ etc / yumを .repos.d / CentOSの-Base.repoます。http:// mirrors.aliyun.com/repo/Centos-7.repo [ルート@ node1のyumを .repos.d] #wgetの -Pは/ etc / yumを .repos.d /のhttp:// mirrors.aliyun.com/repo/epel-7.repo [ルート@ノード1 のyum .repos.d]#の猫 << EOF>の/ etc / yumを.repos.d / kubernetes.repo [kubernetes] 名 = Kubernetes BASEURL = HTTPS:// mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 有効= 1 gpgcheck = 0 EOF [ルート@ノード1 yumを。 repos.d]#wgetコマンドのhttps:// mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [ルート@ノード1 のyum .repos.d]#yumはすべて&&きれいにyumの速いmakecacheを
第二には、クラスタを作成します
1、およびインストールツールkubeadm
すべてのノードが動作する必要があります。
[ルート@マスター〜]#yumを インストールドッカーkubectl kubeadm kubelet#デフォルト-y最新バージョンをインストールするには、(バージョンを指定することができますyumを インストールドッカーがkubectl- 1.10。0 kubeadm- 1.10。0 kubelet- 1.10。0 - y軸)を
:関連プロセスを開始します [ルートマスター@〜]#systemctl daemon- リロード [ルートマスター@〜] &&ドッカー有効systemctl#systemctl再起動ドッカー [ルートマスターを@〜]#systemctlの有効kubelet
Kubeletはここから直接起動することはできません、それは再起動を止めるつもりはない、起動しません。
2、マスターのinitクラスタ
(外国人の倉庫にアクセスすることができないケースでは、国内の倉庫を指定することができ、またはスタートアップコンフィギュレーションファイル内の倉庫のアドレスを変更します)
[ルートマスター@〜]#kubeadmのinit --kubernetesバージョン= V1。14.0 --podネットワーク-CIDR = 10.244。0.0 / 16 --service-CIDR = 10.96。0.0 / 12 --imageリポジトリregistry.aliyuncs.com/ google_containers #kubeadm設定画像はプル
#kubeadmリセット
初期化が失敗し、失敗の原因を見つけるために、画面の指示に従ってください。
2つの方法でkubeletとドッキングウィンドウのcgroupのドライバ:cgroupfsはsystemdにして二つのアプリケーション一貫性のあるドライバを保ちます。(ドッキングウィンドウがcgroupfsある場合は、[変更kubelet:環境= - ドッキングウィンドウがsystemdにされている場合は、 "KUBELET_CGROUP_ARGS =のcgroup-ドライバ= cgroupfs"、その後、変更しないでください。)
ドッキングウィンドウのドライバを表示します。
[ルート@マスター〜]#vimの/usr/lib/systemd/system/docker.service
[ルート@ノード1〜]#]ドッキングウィンドウの情報
kubeletドライバを表示します。
[ルート@マスター〜]#vimの/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
[ルート@マスター〜]#vimの/var/lib/kubelet/kubeadm-flags.env
実験の最終的な成功:ドッカドライバの代わりにcgroupfs、kubeletにsystemdに、kubeadmのinit成功したが、正式な提案ドッキングウィンドウドライバは、バージョンに関係するかどうか、疑わしいsystemdには???
3、ノードがクラスタに参加します
マスターノード操作上の準備作業
[ルート@マスター〜]#useraddのオムレツ
[ルート@マスター〜]#passwdのオムレツ
ユーザー・グループに参加するkubeletユーザーにsudo
[ルート@マスター〜]#SU - オムレツ
[マスターオムレツ@〜] $ DIR -p $ HOME / .IN
[Msasterオムレツ@〜] $須藤のcp -a /etc/kubernetes/admin.conf $ HOME / .IN /設定
[kubelet @マスター〜] $ sudoをchownコマンド$(のid -u):$(IDの-g)$ HOME / .kube /設定
ノード1の実行に参加します:
[ルート@ノード1〜]#kubeadm 192.168.42.128:6443 --token vo63m6.gnlukzl3myf1m3v8に参加\
--discoveryトークン-CA-CERT-ハッシュSHA256:5212f47a507fb30cbe8f14b35c1d92748874eda5d9ef60e38efca373a487567a
4、ネットワーク設定
適用kubectl -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
これまでのところ、クラスタ構築の成功はK8S。結果は以下の通りであります:
4、既存のクラスタにノードを追加します。
新节点准备,在各节点上做好主机名,hosts文件映射,ssh等效性配置,关闭swap等初始化操作,安装docker,kubelet并正常启动;
在master上打印出加入集群的命令:
[kubelet@master ~]$ kubeadm token create --print-join-command
在新节点上执行以上命令
执行加入命令时如果报错,报错内容为:error execution phase kubelet-start: error uploading crisocket: timed out waiting for the condition。进行如下操作:
[root@node2 ~]# swapoff -a [root@node2 ~]# kubeadm reset [root@node2 ~]# iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables –X [root@node2 ~]# systemctl daemon-reload [root@node2 ~]# systemctl restart kubelet
遇kubelet报错如下:Failed to get system container
问题产生原因为:kubernetes和docker版本兼容性问题。
三、遇到的问题
默认 kubeadm 创建的集群会在内部启动一个单点的 etcd,当然大部分情况下 etcd 还是很稳定的,但是一旦etcd 由于某种原因挂掉,这个问题会非常严重,会导致整个集群不可用。具体原因是 etcd 存储着 kubernetes 各种元数据信息;包括 kubectl get pod 等等基础命令实际上全部是调用 RESTful API 从 etcd 中获取的信息;所以一但 etcd 挂掉以后,基本等同于 kubectl 命令不可用,此时将变为 ‘瞎子’,集群各节点也会因无法从 etcd 获取数据而出现无法调度,最终挂掉。
此时kube-apiserver因为连接不到etcd,死活启动不起来。然后整个集群就没救了。
单独启动etcd容器也启动不起来,容器会不停的被删除重启,但就是启动不起来,使用
[root@master manifests]# docker logs -f 76797c65b499 #查看日志。
只能重建集群,之前的所有信息都没有了。
四、Tips:
更改docker仓库地址:
[root@master ~]# vim /etc/sysconfig/docker OPTIONS=' --log-driver=journald --registry-mirror=http://xxxx.mirror.aliyuncs.com
K8s和docker要版本兼容,不能直接yum,版本对照参照git文档
# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo