Kubernetes(a)はK8Sを構築するために、ゼロからの公式ドキュメントに従ってください

K8Sを構築するために、ゼロからの公式文書に続くKubernetesチュートリアル

記事住所:blog.piaoruiqing.com/blog/2019/0 ...

序文

この記事はすぐに、書籍、オンラインチュートリアルをそのインストールと展開。Kubernetes反復更新を説明するために、Kubernetes公式文書を参照して、読者を取るので、新しいバージョンには適用されないかもしれませんが、公式のドキュメントができます。

あなたが収穫することができ、この記事を読みます:

  • Kubernetesの公式インストールガイドを読み、Kubernetes環境を設定する方法。
  • Kubernetesのインストールプロセスを注意してください。
  • 一般的なピットを避けてください。

あなたはこれを読んでする必要があります。

  • おなじみのLinuxコマンド。
  • あなたはKubernetesがやってするために使用されて知っている(または他の(ಥ_ಥを)やってそれをインストールします)。
  • ドッカーを知っています

機器の準備

ドキュメントのリンク:始める前に

いいえ。 名前 数量 リマーク
1 サーバー 2 オペレーティングシステム:Linux(centos7、他のオペレーティングシステムの公式ドキュメントを参照して、インストールプロセスに類似していてもよい)
マシン構成:CPU> = 2、メモリ> = 2G

公式サイトを見つけるためにkubeadmインストールマニュアルの入り口を、文書は非常に詳細である。英語の読者は、直接英語で文書を表示するときではないタイムリーなインストール、中国語、不完全なドキュメントの更新は問題がある可能性が障害物なしで読んでお勧めします。

予備的

私は以前に2台の仮想マシン、centos7(CPUx2、メモリ2.5G)。そして、ルータ上の2台の仮想マシンの固定IPアドレスがインストールされています。

ホスト名を変更します。

[root@k8s-master ~]$ vim /etc/hostname # 修改hostname
[root@k8s-master ~]$ vim /etc/hosts	# 将本机IP指向hostname
[root@k8s-master ~]$ reboot -h 		# 重启(可以做完全部前期准备后再重启)
复制代码

次のように修正した後、2台の仮想マシンが構成されました:

# in k8s-master
[root@k8s-master ~]$ cat /etc/hostname 
k8s-master
[root@k8s-master ~]$ cat /etc/hosts | grep k8s
10.33.30.92 k8s-master
10.33.30.91 k8s-worker

# in k8s-worker
[root@k8s-worker ~]$ cat /etc/hostname 
k8s-worker
[root@k8s-worker ~]$ cat /etc/hosts | grep k8s
10.33.30.92 k8s-master
10.33.30.91 k8s-worker
复制代码

MACとproduct_uuidの確認のみ

文档链接:MACアドレスとproduct_uuidが、ノードごとに一意であることを確認します

[root@k8s-master ~]$ ifconfig -a    # 查看MAC
[root@k8s-master ~]$ cat /sys/class/dmi/id/product_uuid	# 查看product_uuid
复制代码

注意:あなたがcentos7ない場合はifconfig、コマンドを、あなたが行うことができますyum install net-toolsインストールを。

ファイアウォールを設定

ドキュメントのリンク:必要なポートを確認します

それは直接、ファイアウォールをオフ、ネットワーク内のローカルテスト環境、利便性の著者であるため、より高いセキュリティ要件の場合は、ポートを解放するために必要な公式ドキュメントを参照することができます。

[root@k8s-master ~]$ systemctl stop firewalld	# 关闭服务
[root@k8s-master ~]$ systemctl disable firewalld	# 禁用服务
复制代码

SELinuxを無効にします

ドキュメントのリンク:corednsのPODSはCrashLoopBackOffまたはエラー状態を持っています

変更/etc/selinux/configセットをSELINUX=disabled。マシンを再起動します。

[root@k8s-master ~]$ sestatus	# 查看SELinux状态
SELinux status: disabled
复制代码

スワップを無効にします

ドキュメントのリンク:始める前に

スワップは無効。あなたはしなければならない kubeletを正しく動作させるためにスワップを無効にします。

エディタは/etc/fstab、スワップをコメントアウト。マシンを再起動します

[root@k8s-master ~]$ vim /etc/fstab 
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0
复制代码

インストールドッカー

ドキュメントのリンク:ゲットドッカーエンジン- CentOSのためのコミュニティコミュニティ

十分に詳細に説明されているインストール手順のドッキングウィンドウ公式ドキュメント、プロセスはそれがそれらを繰り返すことはしません、複雑ではありません。

  • ドッキングウィンドウの使用18.09、ドッキングウィンドウは、最新バージョンをサポートしていませんK8S 19.x明示的にインストールマニュアルに記載された方法でバージョン番号を指定してくださいyum install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io

  • ネットワークが良くない場合は、国内の情報源に切り替えることができ、などのアリ雲、USTC、ソースドッキングウィンドウのインストールマニュアルアドレスaliyunここに添付することができます:コンテナミラーリングサービス

  • インストールが完了したら、それは国内の推奨ミラーリングアリクラウドアクセラレーションのためのドッキングウィンドウのソースを交換することが推奨され、そこにあるアリクラウドアカウントを無料で使用することができますが。阿里云 -> 容器镜像服务 -> 镜像中心 -> 镜像加速

設定ドッカー

文書アドレス:コンテナランタイム

変更された/etc/docker/daemon.json次のように読み取るために:

{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
复制代码
  • どちらhttps://xxxxxxxx.mirror.aliyuncs.comであるアリの雲のアドレスをミラーリング加速、xxxxxxxxあなたが示すように、自分のアカウントに対処するために交換する必要があります。

インストールが実行するように構成された後:

[root@k8s-master ~]$ systemctl enable docker
[root@k8s-master ~]$ systemctl start docker
复制代码

インストールKubernetes

ドキュメント住所:kubeadm、kubeletとkubectlのインストール

ソースの追加

国内ネットワーク上の理由としては、公式文書アドレスが利用できない、それはアリクラウドは、次のコードを実行し、アドレスをミラーリング置き換え:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF
复制代码

インストール

[root@k8s-master ~]$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
[root@k8s-master ~]$ systemctl enable kubelet && systemctl start kubelet
复制代码

ネットワーク構成を変更します。

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
复制代码

注:この時点では、上記のすべての操作は、また同じに注意を払っていないなど、機械労働者のホスト名で実行する必要があります。

初期マスター

初期化ファイルを生成します

[root@k8s-master ~]$ kubeadm config print init-defaults > kubeadm-init.yaml
复制代码

ファイルを変更する必要があり、2があります。

  • advertiseAddress: 1.2.3.4修正ネイティブアドレス
  • imageRepository: k8s.gcr.ioに修正imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

ファイルの後に変更され、次のとおりです。

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.33.30.92
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.15.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}
复制代码

ダウンロード画像

[root@k8s-master ~]$ kubeadm config images pull --config kubeadm-init.yaml
复制代码
[著作権]
に掲載されたこの記事 のPu Ruiqingのブログは 、転載、非商業的な使用が再現できますが、元の作者保持する必要があり プルトニウムRuiqing およびリンク: blog.piaoruiqing.comを 。協議や協力の許可側面は、Eメールをご連絡ください: Gmailの@ piaoruiqing。 COM

初期化を実行

[root@k8s-master ~]$ kubeadm init --config kubeadm-init.yaml
复制代码

待ちが終了すると、出力は次のようになります。

...
Your Kubernetes control-plane has initialized successfully!
...
Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.33.30.92:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:2883b1961db36593fb67ab5cd024f451b934fc0e72e2fa3858dda3ad3b225837 
复制代码

最後の2行は、保存する必要がkubeadm join ...ワーカーノードが実行するコマンドを結合します。

そして、kubectlコマンドを実行することができ、現在のユーザーのための環境を設定します。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码

テスト:ここNotReadyでは、ネットワーク構成ためではありません。

[root@k8s-master kubernetes]$ kubectl get node
NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   3m25s   v1.15.3
复制代码

ネットワーク設定

ドキュメント住所:取扱説明書を

ダウンロードプロファイル

[root@k8s-master ~]$ wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
[root@k8s-master ~]$ cat kubeadm-init.yaml | grep serviceSubnet:
serviceSubnet: 10.96.0.0/12
复制代码

オープンcalico.yaml、され192.168.0.0/16に修正10.96.0.0/12

なお、一貫性をIPとkubeadm-init.yaml必要性をcalico.yaml、いずれかの初期化後、初期化前にkubeadm-init.yamlを変更したり、calico.yamlを変更します。

実行kubectl apply -f calico.yamlネットワークを初期化します。

この時点でのビューノード情報、状態はすでにマスターであるReadyの。

[root@k8s-master ~]$ kubectl get node
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   15m   v1.15.3
复制代码

インストールのダッシュボード

ドキュメント住所:ウェブUI(ダッシュボード)

ダッシュボードの展開

ドキュメント住所:ダッシュボードのUIを展開します

[root@k8s-master ~]$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
[root@k8s-master ~]$ kubectl apply -f recommended.yaml 
复制代码

展開が完了すると、実行kubectl get pods --all-namespacesビューには、状態をポッド

[root@k8s-master kubernetes]$ kubectl get pods --all-namespaces | grep dashboard
NAMESPACE              NAME                                        READY   STATUS   
kubernetes-dashboard   dashboard-metrics-scraper-fb986f88d-m9d8z   1/1     Running
kubernetes-dashboard   kubernetes-dashboard-6bb65fcc49-7s85s       1/1     Running 
复制代码

ユーザーを作成します。

ドキュメント住所:サンプルにユーザーの作成

ダッシュボードファイルを作成するためのログインに使用するユーザーを作成すると、dashboard-adminuser.yaml次のように読み取ります。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
复制代码

コマンドを実行しますkubectl apply -f dashboard-adminuser.yaml

証明書の生成

ドキュメント住所:ダッシュボードの1.7.xへのアクセスおよび上記

公式文書には、ログイン1.7.X以降のログインを提供するが、それは明らかではない、それは正確に文書の方法に従っていませんでした。

[root@k8s-master ~]$ grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
[root@k8s-master ~]$ grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
[root@k8s-master ~]$ openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"
复制代码

証明書は3番目のコマンドのパスワードを入力するように求められます生成するとき、あなたは二回入力し、直接スキップすることができます。

kubecfg.p12クライアントマシンの証明書をインポートする必要があります。クライアントマシンに証明書をコピーするには、導入することができます。

~$ scp [email protected]:/root/.kube/kubecfg.p12 ./
复制代码
  • なお:あなたが直接入力したインポートすると、パスワード・プロンプトがパスワードを入力すると、スキップが証明書を生成し、パスワードをもつれていないのWHERE(゚▽゚)/

私たちは、パネル、およびアクセスアドレスをログインすることができます。この時点で:https://{k8s-master-ip}:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/loginログオン時に証明書を選択するように求められます、あなたが入力し、現在のユーザ名とパスワードを確認し(ただし、コンピュータのユーザー名とパスワード)を求めるプロンプトが表示されます。

ログインダッシュボード

ドキュメント住所:ベアラトークン

実行はkubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')、トークンを取得します。

[root@k8s-master .kube]$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-dhhkb
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: b20d1143-ce94-4379-9e14-8f80f06d8479

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWRoaGtiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiMjBkMTE0My1jZTk0LTQzNzktOWUxNC04ZjgwZjA2ZDg0NzkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.f6IbPGwIdFZWStzBj8_vmF01oWW5ccaCpPuVQNLSK1pgEqn0kNVK_x0RYSuKEnujObzpQQdFiRYcI6ITHja2PIVc5Nv83VCn5IaLvZdYuGZWUYRw0efJUBMA4J4N8-pRkiw6fYAuWLeGYghLNXL_nDdC_JkG75ASqrr3U1MVaikOcfrEPaI-T_AJ3TMYhI8aFoKiERpumu5W1K6Jl80Am9pWDX0Ywis5SSUP1VYfu-coI48EXSptcaxEyv58PrHUd6t_oMVV9rpqSxrNtMZvMeXqe8Hnl21vR7ls5yTZegYtHXSc3PKvCaIalKhYXAuhogNcIXHaMzvLSbf-DSQkVw
复制代码

次のようにサインイン]をクリックし、ログインページをコピーするトークン、効果は次のとおりです。

ワーカーノードの追加

繰り返します前期准备-修改hostname- 安装Kubernetes-修改网络配置全体の動作を、ワーカーマシンを初期化します。

労働者は、クラスタに参加する次のコマンドを実行します。

kubeadm join 10.33.30.92:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:2883b1961db36593fb67ab5cd024f451b934fc0e72e2fa3858dda3ad3b225837 
复制代码
  • 注意:ここで生成した秘密鍵は、マスターの初期化、上記の参照です。

添加が完了した後、マスター上のノードのステータスを表示します。

[root@k8s-master ~]$ kubectl get node
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   10h   v1.15.3
k8s-worker   Ready    <none>   96s   v1.15.3
复制代码

また、パネル上で閲覧することができます。

この記事は参考になりました場合は、賞賛にそれを指して下さい(¯▽¯)「あなたのために

リファレンス

推奨読書:

国民の関心番号(コード詩的)へようこそ:

[著作権]
に掲載されたこの記事 のPu Ruiqingのブログは 、転載、非商業的な使用が再現できますが、元の作者保持する必要があり プルトニウムRuiqing およびリンク: blog.piaoruiqing.comを 。協議や協力の許可側面は、Eメールをご連絡ください: Gmailの@ piaoruiqing。 COM

おすすめ

転載: juejin.im/post/5d7fb46d5188253264365dcf