k 3 sを使ってCentos 7でK 8 Sを実行します.


本論文の参考:
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
まだ問題があります.後で処理します.