kubeadm展開kubernetes(1.15.2版)---ピットの周りにあなたを取ります

K8S火災、オンラインチュートリアルの多くは、あまりにも速い欲求不満公式更新、スターターのために、誰もが出て登る能力を持って、チュートリアルの多くは、背後に展開されている、および多数のピットがあります。

学生のそれぞれは、展開K8Sを進行したいためには、展開をクリアするために、山なので、さまざまなコンポーネントや機能のいくつかのアイデアを持っているので、今日はこのノートのチュートリアルは、自分とクラスメートに前方に移動することができます厚い基礎石の層で覆われた道は、あなたがこの記事を読んでいるどのような理由のために関係なく、そして、誰かが知識を求めたい場合は、その後、進行状況を探求したい方法を説明し、その後、自分の小さなを共有しないようには意味がありません少し経験。

注意:小滴のおかげでbokeyuan、私はさらに巨人の肩の上に立って、コンテンツの多くは、彼の記事から構成されています。

ドッカー:コンテナランタイムにkubernetes依存
kubeletは:コア剤成分をkubernetes、各ノードは、ポッドおよびライフサイクル管理と他のノードのような充電開始する
kubectlを:kubernetesコマンドラインツール制御マスターにのみ使用することができます。
kubeadm:K8Sクラスタを初期化するために使用kubernetesブートストラップ。

環境の準備ではまず、すべてのノード

1、ソフトウェアのバージョン

ソフトウェア
kubernetes v1.15.2
CentOSの7.5 1809年7月6日ミニCentOSの
ドッカー v18.09
フランネル 0.10.0

2、ノード・プランニング

IP 役割 ホスト名
192.168.3.10 K8Sマスター マスター
192.168.3.11 K8S node01 slaver1
192.168.3.12 K8Sとnode02 slaver2

ここで、私はネットワークアーキテクチャを入れていないだろう、とあなたは、仮想マシンを持っていると仮定し、省がファイアウォールとSELinuxをオフにする準備ができている、と3つのノードウェルhostsファイルを追加し、良いホスト名を変更し、円滑なネットワークを確保するために、

薬の必要性やドッキングウィンドウを加速するには、(自身が他のチュートリアルやマニュアルプルミラーリングを参照してくださいする必要があります)あなたが任意のファイルを引き出すことができる無料のオンラインの世界ではすべてここにあると仮定し、このチュートリアルを簡単にするために、プルミラーリング。

私のテストマシンは香港に位置しており、プロキシまたはアクセラレーションを設定する必要はありません。

データを処理するためにiptablesの橋:

/etc/sysctl.d/k8s.confファイルを作成し、次の行を追加します。

net.bridge.bridge-NF-CALL-ip6tablesを= 1 
net.bridge.bridge-NF-CALL-のiptables = 1 
net.ipv4.ip_forward = 1

変更を実行します。

modprobeはbr_netfilter 
のsysctl -p /etc/sysctl.d/k8s.conf

システム・スワップをシャットダウンします

クロージャーシステム・スワップ、そうでない場合は起動しませんkubelet近い、デフォルトの設定を要求Kubernetes 1.8スタート。kubelet起動パラメータ-failスワップ・オン=偽による方法は、制限を変更します。第二の方法スワップは、システムを閉じました。

するswapoff -a

無料-mを使用して、自動的にマウントSWAPをコメントアウトし、/ etc / fstabファイルを変更しますが、スワップがクローズされたことを確認します。

#注释掉スワップ分区
[ルート@ localhostの/]#SED -iさん/.*スワップ。* /#&/ 'の/ etc / fstabの

[ルート@ localhostの/]#無料-m 
              総使用されるフリー共有バフ/キャッシュ利用可能
MEM:962 154 446 6 361 612 
スワップ:0 0 0

恒久的に無効にスワップ

エコー "vm.swappiness = 0" >> /etc/sysctl.confの

すべてKubernetesは、ノード1とノード2ノード上で次のスクリプトを実行します。

猫> /etc/sysconfig/modules/ipvs.modules << EOF 
#!/ binに/ bashのの
modprobeは- ip_vs 
のmodprobe - ip_vs_rr 
のmodprobe - ip_vs_wrr 
のmodprobe - ip_vs_sh 
のmodprobe - nf_conntrack_ipv4 
EOF 
のchmod 755の/ etc /のsysconfig /モジュール/ipvs.modules && bashの/etc/sysconfig/modules/ipvs.modules &&はlsmod | grepの-e ip_vs -e nf_conntrack_ipv4

インストールのドッキングウィンドウ

ドッキングウィンドウのバージョンは1.15.2 K8S最高のサポートドッカバージョン18.09、そして私たちは、このバージョンをロードし、(それを実現することなくピットのある生活)に分類されます私の友人の多くの成功に不可欠K8S小さな最高のバージョン18.09.8。

公式のインストールのチュートリアルドッキングウィンドウのによると:

CentOSには、すべてのドッキングウィンドウのプログラムをきれいにしています:

yumのドッキングウィンドウの\削除
                  ドッキングウィンドウ-クライアントの\ 
                  ドッキングウィンドウ・クライアント・最新の\ 
                  ドッキングウィンドウ共通\ 
                  ドッキングウィンドウ-最新の\ 
                  ドッキングウィンドウ-最新のlogrotate \ 
                  ドッカ- logrotateの\の
                  ドッキングウィンドウ-エンジンを
ヤムヤム-utilsの\ -yインストール
  デバイスマッパー永続的データの\ 
  LVM2を

最新のドッキングウィンドウのyumリポジトリを追加します。

\のyum-config設定マネージャ
    --add-レポ\ 
    https://download.docker.com/linux/centos/docker-ce.repo

によって与えられた公式のインストールコマンド:

yumをインストールドッキングウィンドウ-CE-<VERSION_STRING>ドッキングウィンドウ-CE-cli- <VERSION_STRING> containerd.io

倉庫および高い並べ替えから端に設けられたバージョンに応じて様々なバージョンを表示します。

ソート-r | yumをリストドッカ-ce.x86_64の--showduplicates

ここでは、18.09.8をインストールします。

yumをドッキングウィンドウ-CE-18.09.8ドッキングウィンドウ-CE-CLI-18.09.8 containerd.io -yをインストール

起動します。

ドッキングウィンドウを起動systemctl、ドッキングウィンドウを有効systemctl

systemdにドッカーのcgroupドライバを変更

Linuxディストリビューションとして使用するのにsystemdをinitシステムの場合は、ので、ここで、タイトなリソース状況により安定したサーバーノードを確実にsystemdため、各ノードのドッキングウィンドウ上のcgroupドライバを変更することができるのcgroupドライバドッキングウィンドウとしてsystemdに使用します。

作成または変更/etc/docker/daemon.json

{ 
    "EXEC-OPTS":[ "native.cgroupdriver = systemdに"] 
}

再起動ドッキングウィンドウ:

ドッキングウィンドウの再起動systemctl 

ドッキングウィンドウの情報を| grepのcgroup内
のcgroupドライバ:systemdに

インストールkubeadmとkubelet

猫<< EOF> /etc/yum.repos.d/kubernetes.repo 
[kubernetes] 
名= Kubernetes 
BASEURL = HTTPS://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 
有効= 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のオムレツkubeadmのkubectlをインストール-y

上記のコマンドは、プログラムの最新バージョンをインストールするためにデフォルト設定されます、1.15.2があります

インストールkubeadm initは、クラスタに必要なドッキングウィンドウミラーを初期化します

クラスタを開始する前に初期化するために使用することができるkubeadm config images pullプル必要ドッカーミラーK8Sの各ノードに予め

[ルート@ localhostの/]#のkubeadm設定画像一覧
k8s.gcr.io/kube-apiserver:v1.15.2 
k8s.gcr.io/kube-controller-manager:v1.15.2 
k8s.gcr.io/kube-scheduler:v1 .15.2 
k8s.gcr.io/kube-proxy:v1.15.2 
k8s.gcr.io/pause:3.1 
k8s.gcr.io/etcd:3.3.10 
k8s.gcr.io/coredns:1.3.1

一つ一つは、手動で最初の先端に、プル、プラス各ラインの前にドッカープルので、スクリプトまたは手動で入力トラブルを書き込みます。

kubeadm設定画像リスト| awkの{印刷『ドッキングウィンドウプル』 $ 0} ' 
ドッカプルk8s.gcr.io/kube-apiserver:v1.15.2 
ドッキングウィンドウプルk8s.gcr.io/kube-controller-manager:v1.15.2の
ドッキングウィンドウプルk8s.gcr.io/kube-scheduler:v1.15.2 
ドッキングウィンドウプルk8s.gcr.io/kube-proxy:v1.15.2の
ドッキングウィンドウプルk8s.gcr.io/pause:3.1 
ドッキングウィンドウプルk8s.gcr.io/etcd:3.3 0.10 
ドッキングウィンドウプルk8s.gcr.io/coredns:1.3.1

ダイレクトコピー実行。

kubeadmクラスタの初期化

マスター上で以下のコマンドを実行し、クラスタを初期化kubeadm使用します。

kubeadm INIT --kubernetesバージョン= v1.15.2 --pod-ネットワークCIDR = 10.244.0.0 / 16 --service-CIDR = 10.96.0.0 / 12

展開が成功したら、ここでの焦点:

写真.PNG

必要な環境パスを設定するには、画面の指示に従ってください:

mkdir -pます$ HOME / .kube 
CP -i /etc/kubernetes/admin.confの$ HOME / .kube / configに
はchown $(のid -u):$(IDの-g)の$ HOME / .kube /設定

必ず部品が正常な状態にされていることを確認し、クラスタの状態を見てください:

[ルート@マスター/]#kubectl GET CSの
名前STATUSメッセージエラー
スケジューラ健康OK                   
コントローラマネージャ健康OK                   
etcd-0健康{ "健康": "真"}

写真.PNG

なしネットワーク展開ポッドので、そうcorednsが起動するのを待つために遅延すること。

ネットワークを構成するために、ポッド

ポッドプラグは、各ポッドが通信できるように、ネットワークをインストールする必要があります。アプリケーションを展開し、ネットワークを展開する必要があり、KUBE-dnを開始する前に、kubeadmはCNIネットワークをサポートしています。

pod支持的网络插件有很多,如CalicoCanalFlannelRomanaWeave Net等,因为之前我们初始化使用了参数--pod-network-cidr=10.244.0.0/16,所以我们使用插件flannel

安装:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

配置完后,通过命令可以清晰的看到随着flannel被安装成功并初始化后coredns渐渐被调度起来的过程:

写真.PNG

不要着急添加节点,先把master配置到底:

部署完了,就开始部署dashboard,有命令行没有web,感觉差点什么;

安装 Kubernetes Dashboard

k8s dashboard 的 docker镜像是

k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0

先准备好dashboard镜像,没办法,就是这么随意,国内得绕弯去别处找并打标签:

docker pull k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

安装,这个是目前最新的编排文件地址,网上很多坑就是因为这个文件路径都已变更:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

修改NodePort:

因为Service 是ClusterIP 类型,为了方便使用,我们可通过下面命令修改成NodePort 类型。

kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

查看端口

[root@master ~]# kubectl get svc -n kube-system
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)        AGE
kube-dns       ClusterIP     10.96.0.10       <none>           53/UDP,53/TCP   6h
kubernetes-dashboard  NodePort  10.107.238.193  <none>         443:32238/TCP   167m

登录web端:https://192.168.3.10:32238

写真.PNG

 

配置登录权限

Dashboard 支持 Kubeconfig 和 Token 两种认证方式,为了简化配置,我们通过配置文件 dashboard-admin.yaml 为 Dashboard 默认用户赋予 admin 权限。

[root@ken ~]# cat dashboard-admin.yml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels: 
     k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system

这里的重点是创建了一个ServiceAccountName为kubernetes-dashboard的系统服务账号,我们要记住它,有大用。

应用并且获取token:

kubectl apply -f dashboard-admin.yaml
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard| awk '{print $1}')

类似于下面这一段,把 token 填入确定即可。

Name: admin-user-token-xln5d
Namespace: kube-system
Labels: <none>Annotations: kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: 54801c01-01e2-11e9-857e-00505689640f
Type: kubernetes.io/service-account-token
Data====ca.crt: 1025 bytes
namespace: 11 bytes
token: 
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJ
lLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXhsbjVkIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3V
udC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI1NDgwMWMwMS0wMWUyLTE
xZTktODU3ZS0wMDUwNTY4OTY0MGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.MbGeROnjA9f1AhBO8v2GuHC1ihVk1UcxpM8lYk
IC_P9Mx9jVZcM56zr4jcxjSnIuZPZxIznLJIIo7TRY94Ya2VujzF2lpDxlNYF2hWY3Ss9d5LqRtP3JsJNZVLmxvYIGnmnGyVCEikCM6W44WPu-S

基本就登录成功了,但是还没完,想要只管的看到每个pod和容器的资源使用情况,得安装K8S原生支持的基本可视化监控插件,这里说的就是:heapster+influxdb+grafana组合;

Heapster 本身是一个 Kubernetes 应用,部署方法很简单,但是它不像dashboard那样apply下就起来,因为它不是K8S默认系统应用,所以master默认是不允许直接调度到master节点上运行,所以,为了将heapster部署到master节点,必须首先放开这个限制:

kubectl taint node master node-role.kubernetes.io/master-

为了保险起见,还是先手动把需要的镜像拉取过来吧,不然服务一直处于延时等待启动状态:

docker pull k8s.gcr.io/heapster-amd64:v1.5.4
docker pull k8s.gcr.io/heapster-grafana-amd64:v5.0.4
docker pull k8s.gcr.io/heapster-influxdb-amd64:v1.5.2

这样这三剑客就这么来了,

上官方克隆heapster并安装:

git clone https://github.com/kubernetes/heapster.git
kubectl apply -f heapster/deploy/kube-config/influxdb/
kubectl apply -f heapster/deploy/kube-config/rbac/heapster-rbac.yaml

部署完了就恢复Master Only状态,禁止调度其他pod到master节点:

kubectl taint node master node-role.kubernetes.io/master=:NoSchedule

运行命令查看部署情况:

kubectl get pod -n kube-system |grep -e heapster -e monitor
kubectl get deploy -n kube-system |grep -e heapster -e monitor
kubectl get svc -n kube-system |grep -e heapster -e monitor

写真.PNG

修改NodePort,将grafana暴露到公网访问:

kubectl patch svc monitoring-grafana -p '{"spec":{"type":"NodePort"}}' -n kube-system

写真.PNG

好,这就算部署完了,你以为基本的master就这么简单的部署完了,更多的坑在向你招手;

在web页面等了半天怎么刷新发现可视化监控图表都没有出来,我们打开heapster容器的日志发现api接口被拒问题,于是修改heapster的部署文件:

#Heapster.yamlファイル
- --source = Kubernetes:HTTPS //kubernetes.default 
 
位に改訂
- := kubernetes :? Kubernetes --sourceます。https://kubernetes.default useServiceAccount =真&kubeletHttps =真&kubeletPort = 10250&=安全でない真

そして、場所を変更し、トークンの展開の前の時間はあなたが遠大な効果があることを覚えておくことができます、ここでは、このアカウントを使用することです:

写真.PNG

ここではもちろんのダッシュボードを使用して、ウェブエディタ、少し人類、YAML良い文法で、コマンドラインに直接得ることができるので、それは、破壊されました:

kubectl編集展開heapster -n KUBE-システム

更新後、K8Sは元の容器を破壊して、自動的に新しいコンテナを再作成、現象が発生します:

写真.PNG

写真.PNG

最後に、トークンのログインダッシュボードのタイムアウト設定は、デフォルトではピットがあり、公式900Sのデフォルトは、学生が実験に従事するため、単に痛みである、15分です
パラメータ名デフォルト値説明
トークン-TTL(15分の有効期限 JWEの秒数)は、ダッシュボードのデフォルトによって生成されたトークン:15分0 -有効期限が切れることはありません...

Kubernetes-ダッシュボードは直接トークン-TTLパラメータによって設定することができ、トークンの有効期限をダッシュ​​ボード、デプロイメントファイルを変更し、

ポート:
- containerPort:8443 
  プロトコル:TCPの
引数:
  - --auto-生成-証明書
  - --token-TTL = 43200

あなたがドッキングウィンドウ-CLIのバージョンをドッキングウィンドウとかなり右でない場合は、あなたがシェルコンテナにログインすることができない、別のピットに入ることができ、

kubectlのexec -itコンテナ名-n KUBE-システムのsh(/ binに/ shを、/ binに/ bashのは、bash)のいずれかが、一時的に解決策を実行しないことができない、このパスにノーと言います。

その後、あなたは、コンテナのログを記録するための時間はUTCタイムゾーンの形式であるでしょう、それをクロール、ピットです。

grafana興味QuguanネットワークのダウンロードK8Sテンプレート、直輸入、ゆっくりと遊びます!


おすすめ

転載: blog.51cto.com/kingda/2429579