1.インストールkubernetes kubeadm

まず、環境を準備

すべての計画ホスト(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.100 kubeadm- 1.100 kubelet- 1.100   - y軸)を
:関連プロセスを開始します [ルートマスター@
〜]#systemctl daemon- リロード [ルートマスター@〜] &&ドッカー有効systemctl#systemctl再起動ドッカー [ルートマスターを@〜]#systemctlの有効kubelet

Kubeletはここから直接起動することはできません、それは再起動を止めるつもりはない、起動しません。

2、マスターのinitクラスタ

(外国人の倉庫にアクセスすることができないケースでは、国内の倉庫を指定することができ、またはスタートアップコンフィギュレーションファイル内の倉庫のアドレスを変更します)

[ルートマスター@〜]#kubeadmのinit --kubernetesバージョン= V1。14.0 --podネットワーク-CIDR = 10.2440.0 / 16 --service-CIDR = 10.960.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

おすすめ

転載: www.cnblogs.com/cmxu/p/12060790.html