k 3 sを使ってCentos 7でK 8 Sを実行します.
13523 ワード
本論文の参考:
K 3 sを使ってFedora IoTでK 8 S Linux中国を運行します.
https://mp.weixin.qq.com/s?__biz=MzI 1 NDQwNDYyMg=&mid=2247487246&idx=1&sn=43 b 0 ac 1 cba 8 a 53 dee 2303667 b 158&chksm=e 9 c 4 fe 6 fdeb 37779 a 4 e 4 d 053 c=543 a 3015 cf 2 c=c 258 d 1219 c
一つの「正常」に設置されたKubergnetesは、モノのインターネットにはちょっと重いです.K 8 sの推奨メモリの配置は、マシンごとに2 GBです.でも、私達もいくつかの代替品があります.その中の新人はk 3 sです.ライト級のKubergnetesの発行版です.
Kubergnetesは人気のある容器編成システムです.それは、大きな負荷を扱うことができる強力なハードウェアで最も一般的かもしれない.しかし、ラズベリーパイ3のような軽量級の設備でも運行できます.私たちは読み続けて、それをどうやって実行するかを調べましょう.
どうしてKubergnetesを使いますか?
クラウドコンピューティングの分野で一世を風靡したが、小型の単板機での運行は一般的ではないかもしれない.しかし、私たちは非常に明確な理由があります.まず、これは高価なハードウェアが必要ではないので、Kubergnetesを勉強し、知ることができる良い方法です.その次に、その流行性のため、市場で大量の応用が行われています.もちろん、問題が発生したら、大規模なコミュニティユーザーがあなたを助けてくれます.
最後に、同じように重要なのは、家庭実験室のような小規模な環境の中でも、容器編成は確実に物事をより簡単にすることができます.曲線の学習においては、この点は明らかではないが、これらの技能は将来どのクラスタと付き合っても役に立ちます.単一ノードのラズベリーパイクラスタに直面しても、大規模なマシン学習場にしても、それらの操作方法は同じです.
K 3 s-ライト級のKubergnetes
一つの「正常」に設置されたKubergnetesは、モノのインターネットにはちょっと重いです.K 8 sの推奨メモリの配置は、マシンごとに2 GBです.でも、私達もいくつかの代替品があります.その中の一人の新人は k 3 s —— ライト級のKubergnetesの発行版です.
K 3 sは非常に特殊で、ETcdをSQLiteに置き換えてキーパッドの記憶需要を満たすためです.もう一つのポイントは、k 3 s全体が一つのコンポーネントではなく、一つのバイナリファイルを使用して配布されることである.これはメモリの占有を低減し、インストールプロセスを簡略化した.上記の原因に基づいて、私達は512 MHzのメモリだけでk 3 sを実行できます.
環境準備:
k 3 s-node 1
k 3 s-node 2
2台の本体にホームを配置する
k 3 sをインストールして、k 3 sをインストールするのはとても簡単です.インストールスクリプトを直接実行:
実験と学習にとってはこれが素晴らしいが、単一ノードのクラスターもクラスターとは言えない.幸いにも、他のノードを追加することは、最初のノードを設定することより難しくない.インストールスクリプトに2つの環境変数を伝達するだけで、k 3 sのサーバー部分を実行せずに第1のノードを見つけることができます.
今はKubergnetesクラスタがありますが、本当に何ができますか?簡単なWebサーバーの展開から始めましょう.
注意:jurnalctlツールを通じて、node資源を入手できない一番重要な問題は最後にdockerサービスの検査によって発見された各podのpause containerはgcr.ioからダウンロードするために、中国の訪問を遮断したので、不足している鏡像を手動でダウンロードする必要があります.欠けているpauseミラーは3.1バージョンのdocker hubで検索しています.私は最終的に3.1バージョンのpauseを見つけました.
K 3 sを使ってFedora IoTでK 8 S Linux中国を運行します.
https://mp.weixin.qq.com/s?__biz=MzI 1 NDQwNDYyMg=&mid=2247487246&idx=1&sn=43 b 0 ac 1 cba 8 a 53 dee 2303667 b 158&chksm=e 9 c 4 fe 6 fdeb 37779 a 4 e 4 d 053 c=543 a 3015 cf 2 c=c 258 d 1219 c
一つの「正常」に設置されたKubergnetesは、モノのインターネットにはちょっと重いです.K 8 sの推奨メモリの配置は、マシンごとに2 GBです.でも、私達もいくつかの代替品があります.その中の新人はk 3 sです.ライト級のKubergnetesの発行版です.
Kubergnetesは人気のある容器編成システムです.それは、大きな負荷を扱うことができる強力なハードウェアで最も一般的かもしれない.しかし、ラズベリーパイ3のような軽量級の設備でも運行できます.私たちは読み続けて、それをどうやって実行するかを調べましょう.
どうしてKubergnetesを使いますか?
クラウドコンピューティングの分野で一世を風靡したが、小型の単板機での運行は一般的ではないかもしれない.しかし、私たちは非常に明確な理由があります.まず、これは高価なハードウェアが必要ではないので、Kubergnetesを勉強し、知ることができる良い方法です.その次に、その流行性のため、市場で大量の応用が行われています.もちろん、問題が発生したら、大規模なコミュニティユーザーがあなたを助けてくれます.
最後に、同じように重要なのは、家庭実験室のような小規模な環境の中でも、容器編成は確実に物事をより簡単にすることができます.曲線の学習においては、この点は明らかではないが、これらの技能は将来どのクラスタと付き合っても役に立ちます.単一ノードのラズベリーパイクラスタに直面しても、大規模なマシン学習場にしても、それらの操作方法は同じです.
K 3 s-ライト級のKubergnetes
一つの「正常」に設置されたKubergnetesは、モノのインターネットにはちょっと重いです.K 8 sの推奨メモリの配置は、マシンごとに2 GBです.でも、私達もいくつかの代替品があります.その中の一人の新人は k 3 s —— ライト級のKubergnetesの発行版です.
K 3 sは非常に特殊で、ETcdをSQLiteに置き換えてキーパッドの記憶需要を満たすためです.もう一つのポイントは、k 3 s全体が一つのコンポーネントではなく、一つのバイナリファイルを使用して配布されることである.これはメモリの占有を低減し、インストールプロセスを簡略化した.上記の原因に基づいて、私達は512 MHzのメモリだけでk 3 sを実行できます.
環境準備:
k 3 s-node 1
k 3 s-node 2
2台の本体にホームを配置する
cat /etc/hosts
192.168.20.102 k3s-node1
192.168.20.105 k3s-node2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
ファイアウォールを配置して、6443と8372ポートの通信を許可します.あるいは、あなたも簡単に運行できます. systemctl stop firewalld
今度の実験のために防火壁を閉めに来ました.[root@k3s-node1 ~]# service firewalld status
Redirecting to /bin/systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@k3s-node2 ~]# service firewalld status
Redirecting to /bin/systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
k 3 sをインストールして、k 3 sをインストールするのはとても簡単です.インストールスクリプトを直接実行:
[root@k3s-node1 ~]# curl -sfL https://get.k3s.io | sh -
ダウンロードしてインストールしてk 3 sを起動します.インストールが完了したら、以下のコマンドを実行して、サーバからノードリストを取得します.[root@k3s-node1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-node1 Ready 67s v1.14.1-k3s.4
いくつかのオプションが環境変数を介してインストールスクリプトに伝達されます.これらのオプションはドキュメント内にあります.もちろん、バイナリファイルを直接ダウンロードして、K 3 sを手動でインストールすることもできます.実験と学習にとってはこれが素晴らしいが、単一ノードのクラスターもクラスターとは言えない.幸いにも、他のノードを追加することは、最初のノードを設定することより難しくない.インストールスクリプトに2つの環境変数を伝達するだけで、k 3 sのサーバー部分を実行せずに第1のノードを見つけることができます.
curl -sfL https://get.k3s.io | K3S_URL=https://example-url:6443 \
K3S_TOKEN=XXX sh -
上の方 example-url
最初のノードのIPアドレスに置換されるべきか、またはドメイン名は完全に定義されるべきである.このノードでは、(XXXで表される)トークンは、 /var/lib/rancher/k3s/server/node-token
ファイルにあります[root@k3s-node1 ~]# cat /var/lib/rancher/k3s/server/node-token
K10e75d2dfbb13cad45b1895f0e02ab3271cb9238abb54bc902b38c4da69037ffde::node:f05c806e90e81eef905959061a7a1639
k 3 s-node 2で実行します.curl -sfL https://get.k3s.io | K3S_URL=https://k3s-node1:6443 \
K3S_TOKEN=K10e75d2dfbb13cad45b1895f0e02ab3271cb9238abb54bc902b38c4da69037ffde::node:f05c806e90e81eef905959061a7a1639 sh -
[root@k3s-node2 ~]# curl -sfL https://get.k3s.io | K3S_URL=https://k3s-node1:6443 \
> K3S_TOKEN=K10e75d2dfbb13cad45b1895f0e02ab3271cb9238abb54bc902b38c4da69037ffde::node:f05c806e90e81eef905959061a7a1639 sh -
[INFO] Finding latest release
[INFO] Using v0.5.0 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v0.5.0/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v0.5.0/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink from /etc/systemd/system/multi-user.target.wants/k3s-agent.service to /etc/systemd/system/k3s-agent.service.
[INFO] systemd: Starting k3s-agent
k 3 s-node 1でクラスタをチェックする[root@k3s-node1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3s-node1 Ready 12m v1.14.1-k3s.4
k3s-node2 Ready 8s v1.14.1-k3s.4
いくつかの容器を配置する今はKubergnetesクラスタがありますが、本当に何ができますか?簡単なWebサーバーの展開から始めましょう.
[root@k3s-node1 ~]# kubectl create deployment my-server --image nginx
deployment.apps/my-server created
これは名前から nginx
のコンテナイメージから名前を作成します. my-server
の 配置(デフォルトではdocker hubを使ってセンター登録を行います. latest
ラベル)[root@k3s-node1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-server-6889ff8bd8-rx2ll 0/1 ContainerCreating 0 109s
podが発見された状態は常に作成中であり、kubectl describe pod
を利用してpodが作成した詳細な記録を確認する.[root@k3s-node1 k3s]# kubectl describe pods
Name: my-server-6889ff8bd8-rx2ll
Namespace: default
Priority: 0
PriorityClassName:
Node: k3s-node2/192.168.20.105
Start Time: Sat, 01 Jun 2019 15:44:33 +0800
Labels: app=my-server
pod-template-hash=6889ff8bd8
Annotations:
Status: Pending
IP:
Controlled By: ReplicaSet/my-server-6889ff8bd8
Containers:
nginx:
Container ID:
Image: nginx
Image ID:
Port:
Host Port:
State: Waiting
Reason: ContainerCreating
Ready: False
Restart Count: 0
Environment:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-gprt4 (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-gprt4:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-gprt4
Optional: false
QoS Class: BestEffort
Node-Selectors:
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 17m default-scheduler Successfully assigned default/my-server-6889ff8bd8-rx2ll to k3s-node2
Warning FailedCreatePodSandBox 12m (x8 over 17m) kubelet, k3s-node2 Failed create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "k8s.gcr.io/pause:3.1": failed to pull image "k8s.gcr.io/pause:3.1": failed to resolve image "k8s.gcr.io/pause:3.1": no available registry endpoint: failed to do request: Head https://k8s.gcr.io/v2/pause/manifests/3.1: dial tcp 108.177.125.82:443: i/o timeout
Warning FailedCreatePodSandBox 2m31s (x11 over 9m38s) kubelet, k3s-node2 Failed create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "k8s.gcr.io/pause:3.1": failed to pull image "k8s.gcr.io/pause:3.1": failed to resolve image "k8s.gcr.io/pause:3.1": no available registry endpoint: failed to do request: Head https://k8s.gcr.io/v2/pause/manifests/3.1: dial tcp 108.177.125.82:443: i/o timeout
Warning FailedCreatePodSandBox 25s (x3 over 109s) kubelet, k3s-node2 Failed create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "k8s.gcr.io/pause:3.1": failed to pull image "k8s.gcr.io/pause:3.1": failed to resolve image "k8s.gcr.io/pause:3.1": no available registry endpoint: failed to do request: Head https://k8s.gcr.io/v2/pause/manifests/3.1: dial tcp 74.125.203.82:443: i/o timeout
gcr.ioにアクセスできないことが分かりました.注意:jurnalctlツールを通じて、node資源を入手できない一番重要な問題は最後にdockerサービスの検査によって発見された各podのpause containerはgcr.ioからダウンロードするために、中国の訪問を遮断したので、不足している鏡像を手動でダウンロードする必要があります.欠けているpauseミラーは3.1バージョンのdocker hubで検索しています.私は最終的に3.1バージョンのpauseを見つけました.
[root@k3s-node1 ~]# mkdir /certs
[root@k3s-node1 ~]# cd /certs
[root@k3s-node1 certs]# openssl req -subj "/C=CN/ST=BeiJing/L=Dongcheng/CN=k8s.gcr.io" -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout registry.key -out registry.crt
Generating a 2048 bit RSA private key
...+++
.................................+++
writing new private key to 'registry.key'
-----
[root@k3s-node1 certs]# cat /certs/registry.crt >> /etc/pki/tls/certs/ca-bundle.crt
dockerをインストールする[root@k3s-node1 ~]# yum install -y docker
[root@k3s-node1 ~]# systemctl enable docker
[root@k3s-node1 ~]# systemctl start docker
[root@k3s-node1 ~]#
鏡像を取り込む:[root@k3s-node1 ~]# docker pull docker.io/rancher/pause-amd64:3.1
[root@k3s-node1 ~]# docker tag docker.io/rancher/pause-amd64:3.1 k8s.gcr.io/pause:3.1
hostsを修正する[root@k3s-node1 ~]# cat /etc/hosts
192.168.20.102 k8s.gcr.io
ca.certをインストールして、このステップはしないと現れます. x509: certificate signed by unknown authority
mkdir /etc/docker/certs.d/k8s.gcr.io/
cp /certs/registry.crt /etc/docker/certs.d/k8s.gcr.io/ca.crt
dockerを再起動する[root@k3s-node1 ~]# systemctl restart docker
registryを建立します[root@k3s-node1 ~]# docker run -d -p 443:443 --restart=always --name registry -v /certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key registry:2
84e9e6c39eb55a47c66b6964c65e7505bbeb13fa0b1d6d0a6115c74130526c0a
dockersのログを見て、tls handsharke errorは相手にしない[root@k3s-node1 certs]# docker logs registry
time="2019-06-01T13:23:18.951071701Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." go.version=go1.11.2 instance.id=c85c09e2-c1fd-409e-b971-1e08ff4c503b service=registry version=v2.7.1
time="2019-06-01T13:23:18.951230536Z" level=info msg="redis not configured" go.version=go1.11.2 instance.id=c85c09e2-c1fd-409e-b971-1e08ff4c503b service=registry version=v2.7.1
time="2019-06-01T13:23:18.951273123Z" level=info msg="Starting upload purge in 36m0s" go.version=go1.11.2 instance.id=c85c09e2-c1fd-409e-b971-1e08ff4c503b service=registry version=v2.7.1
time="2019-06-01T13:23:18.972833753Z" level=info msg="using inmemory blob descriptor cache" go.version=go1.11.2 instance.id=c85c09e2-c1fd-409e-b971-1e08ff4c503b service=registry version=v2.7.1
time="2019-06-01T13:23:18.973733421Z" level=info msg="listening on [::]:443, tls" go.version=go1.11.2 instance.id=c85c09e2-c1fd-409e-b971-1e08ff4c503b service=registry version=v2.7.1
2019/06/01 13:23:24 http: TLS handshake error from 192.168.20.102:48180: remote error: tls: bad certificate
2019/06/01 13:23:28 http: TLS handshake error from 192.168.20.102:48182: remote error: tls: bad certificate
ラベルを張る
[root@k3s-node1 certs]# docker push k8s.gcr.io/pause:3.1
The push refers to a repository [k8s.gcr.io/pause]
e17133b79956: Pushed
3.1: digest: sha256:fcaff905397ba63fd376d0c3019f1f1cb6e7506131389edbcb3d22719f1ae54d size: 527
クベックスを見る[root@k3s-node1 certs]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-server-6889ff8bd8-mzsxq 0/1 ContainerCreating 0 4h11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 443/TCP 6h1m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-server 0/1 1 0 4h11m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-server-6889ff8bd8 1 1 0 4h11m
[root@k3s-node1 certs]# kubectl delete deployment.apps/my-server
deployment.apps "my-server" deleted
[root@k3s-node1 certs]# kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 443/TCP 6h1m
まだ問題があります.後で処理します.