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
展開が成功したら、ここでの焦点:
必要な環境パスを設定するには、画面の指示に従ってください:
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健康{ "健康": "真"}
なしネットワーク展開ポッドので、そうcorednsが起動するのを待つために遅延すること。
ネットワークを構成するために、ポッド
ポッドプラグは、各ポッドが通信できるように、ネットワークをインストールする必要があります。アプリケーションを展開し、ネットワークを展開する必要があり、KUBE-dnを開始する前に、kubeadmはCNIネットワークをサポートしています。
pod支持的网络插件有很多,如Calico
,Canal
,Flannel
,Romana
,Weave 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渐渐被调度起来的过程:
不要着急添加节点,先把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
配置登录权限
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
修改NodePort,将grafana暴露到公网访问:
kubectl patch svc monitoring-grafana -p '{"spec":{"type":"NodePort"}}' -n kube-system
好,这就算部署完了,你以为基本的master就这么简单的部署完了,更多的坑在向你招手;
在web页面等了半天怎么刷新发现可视化监控图表都没有出来,我们打开heapster容器的日志发现api接口被拒问题,于是修改heapster的部署文件:
#Heapster.yamlファイル - --source = Kubernetes:HTTPS //kubernetes.default 位に改訂 - := kubernetes :? Kubernetes --sourceます。https://kubernetes.default useServiceAccount =真&kubeletHttps =真&kubeletPort = 10250&=安全でない真
そして、場所を変更し、トークンの展開の前の時間はあなたが遠大な効果があることを覚えておくことができます、ここでは、このアカウントを使用することです:
ここではもちろんのダッシュボードを使用して、ウェブエディタ、少し人類、YAML良い文法で、コマンドラインに直接得ることができるので、それは、破壊されました:
kubectl編集展開heapster -n KUBE-システム
更新後、K8Sは元の容器を破壊して、自動的に新しいコンテナを再作成、現象が発生します:
パラメータ名デフォルト値説明 トークン-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テンプレート、直輸入、ゆっくりと遊びます!