Centos7はKubernetesシングルマスタークラスターを構築します

インプリント

Kubernetesのバージョンは1.18.0です

Dockerのバージョンはdocker-ce-19.03.12です

3台の機械の計画

zjj101マシンはマスターノードであり、
zjj102とzjj103はノードノードです。

事前作業

selinuxを閉じる

3台のマシンすべてがオフになっています

ふたつのやり方:

方法1永続的:

 sed -i 's/enforcing/disabled/' /etc/selinux/config

方法2一時的な閉鎖

setenforce 0#一時的

スワップを閉じる

3台のマシンすべてがオフになっています

完全閉鎖

echo "vm.swappiness = 0">> /etc/sysctl.conf 

ファイアウォールをオフにします

3台のマシンすべてがオフになっています

ブリッジされたIPv4トラフィックをiptablesに渡すチェーン

3台すべてのマシンが設定されています

シェルターミナルに直接コピーしてEnterキーを押すだけです

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

3台のマシンで実行し、3台すべてのマシンを有効にし、シェルターミナルにコピーしてEnterキーを押します。

sysctl --system 

3台のマシンすべてが同じ時刻になるように時刻を同期する

Dockerを構成する

K8sはDockerに依存しています

3台のマシンにdockerをインストールします

3台のマシンのDockerバージョンは同じにすることをお勧めします。

インストールが完了し、起動するように設定されています

インストールしたdockerのバージョンはdocker-ce-19.03.12です。

工法参考:

https://www.yuque.com/docs/share/407895ea-3456-4895-bdee-ec16df344a09?#"centos7は指定されたバージョンのdockerをインストールします "

Dockerウェアハウス構成AlibabaCloudイメージ

インターネットの速度が速いので、そうでなければ、画像のダウンロードは非常に遅くなります、

3台すべてのマシンを実行する

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

変更後、構成を有効にするには、すべてのDockerを再起動する必要があります

再起動コマンド:

 systemctl restart docker

Alibaba Cloudyumソフトウェアソースを追加する

後でダウンロードする必要があるため、追加しないと、外国のWebサイトに接続され、ダウンロード速度が非常に遅くなるか、外国のネットワークにさえなる可能性があります。

3台のマシンはすべてLinuxターミナルに接着され、実行されます

 cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

設定が成功したかどうかを確認します

コマンド:

docker info

結果:

レジストリミラーがaliyuncsの場合、設定は成功しています。

[root@zjj103 ~]# docker info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.12
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 2.728GiB
 Name: zjj103
 ID: AA4E:2ANN:6QOU:PPLO:MOJQ:JGPP:27GU:SA2Q:BFIZ:5OER:4VSZ:W3FO
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
  
 Registry Mirrors:
  https://b9pmyelo.mirror.aliyuncs.com/
 Live Restore Enabled: false

K8sのインストールを開始します

kubeadm、kubelet、kubectlをインストールします

バージョンは頻繁に更新されるため、ここでは展開用にバージョン番号を指定します。

バージョン番号を指定しない場合は、最新バージョンがインストールされます。

3つのノードすべてにインストールします

 yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
 

起動を設定する

 systemctl enable kubelet

Kubernetesマスターをデプロイする

マスターノードで実行します。ノードノードでは実行しません。

注:172.16.10.101は、現在のマスターノードのIPです。

 kubeadm init --apiserver-advertise-address=172.16.10.101   --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.18.0   --service-cidr=10.96.0.0/12   --pod-network-cidr=10.244.0.0/16

中国ではデフォルトのプルミラーアドレスk8s.gcr.ioにアクセスできないため、ここでAlibabaCloudミラーウェアハウスのアドレスを指定します。

  • 構成手順:

apiserver-advertise-addressは、現在のノードのjpです。

image-repositoryはミラーアドレスです

kubernetes-バージョンk8sバージョン

service-cidrとpod-network-cidrは、独自の接続によってアクセスされるIPです。現在のシステムと競合しない限り、特別な要件はありません。

  • このコマンドの機能

    マスターノードは、APIサーバーコントローラーマネージャーミラーコンポーネントのダウンロードやデプロイなど、多くのことを行う必要があります

    このコマンドが、K8sに関連する多くのミラーをプルするのに役立ったことがわかります。

[root@zjj101 ~]# docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
registry.aliyuncs.com/google_containers/kube-proxy                v1.18.0             43940c34f24f        11 months ago       117MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.18.0             74060cea7f70        11 months ago       173MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.18.0             d3e55153f52f        11 months ago       162MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.18.0             a31f78c7c8ce        11 months ago       95.3MB
registry.aliyuncs.com/google_containers/pause                     3.2                 80d28bedfe5d        12 months ago       683kB
registry.aliyuncs.com/google_containers/coredns                   1.6.7               67da37a9a360        13 months ago       43.8MB
registry.aliyuncs.com/google_containers/etcd                      3.4.3-0             303ce5db0e90        16 months ago       288MB

kubectlツールを使用します。

画像-20210226194853452

次のものは必ずしも上記のコンソールと同じではありません。確認することをお勧めします

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

そこにあるノードを確認する

 kubectl get nodes

5. 加入Kubernetes Node

ノードノードで実行された上記のコマンドが実行された後、

実行されていない場合、トークンを忘れた場合は、次の方法でトークンを再生成してください。

マスターノードでコマンドを入力します

kubeadm token create --print-join-command

コンソールの内容を確認し、次のようなコマンドを見つけてください。これがトークンです。トークンのデフォルトの有効期間は24時間です。有効期限が切れると、トークンは使用できなくなります。トークンを再作成する必要があります。

 kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn \
    --discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5

このコマンドをノードノードにコピーして実行します。マスターノードは実行する必要がなく、ノードノードが実行することに注意してください。

K8sクラスターを確認する

kubectl get nodesコマンドを使用してマスターノードを確認すると、マスターノードと2つのノードノードがあることがわかります。

[root@zjj101 ~]# kubectl get nodes
NAME     STATUS     ROLES    AGE    VERSION
zjj101   NotReady   master   6h8m   v1.18.0
zjj102   NotReady   <none>   7s     v1.18.0
zjj103   NotReady   <none>   11m    v1.18.0

ネットワークにまだアクセスできず、ネットワークプラグインが必要なため、ステータスはすべてNotReadyであることがわかります。

6.CNIネットワークプラグインを展開します

デフォルトのミラーアドレスにアクセスできず、sedコマンドがdockerハブミラーウェアハウスに変更されます。

最初にマスターノードで実行します。

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

再度実行すると、この時点でネットワークが少し遅くなり、失敗する可能性があります。さらに数回試してください。機能しない場合は、kube-flannel.ymlを見つけて、ローカルに設定してみてください。kubectlapply kube-flannel.ymlはローカルファイルを読み取りますが、読み取れるようです。このシーンがあればやってみます。

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


すべてが正常に開始されたかどうかを確認します

kubectl get pods -nkube-systemコマンド

すべて実行状態にあるということは、実行が成功したことを意味します

[root@zjj101 ~]# kubectl get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-mfjmg         1/1     Running   0          5m52s
coredns-7ff77c879f-t8fdg         1/1     Running   0          5m52s
etcd-zjj101                      1/1     Running   0          6m3s
kube-apiserver-zjj101            1/1     Running   0          6m3s
kube-controller-manager-zjj101   1/1     Running   0          6m3s
kube-flannel-ds-7stq4            1/1     Running   0          105s
kube-flannel-ds-lpbrp            1/1     Running   0          105s
kube-flannel-ds-rsttx            1/1     Running   0          105s
kube-proxy-chmpw                 1/1     Running   0          4m39s
kube-proxy-cvz8v                 1/1     Running   0          4m46s
kube-proxy-pq44r                 1/1     Running   0          5m52s
kube-scheduler-zjj101            1/1     Running   0          6m3s

ノードを見てください

kubectl getnodesコマンド

[root@zjj101 ~]#  kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
zjj101   Ready    master   7m34s   v1.18.0
zjj102   Ready    <none>   6m7s    v1.18.0
zjj103   Ready    <none>   6m1s    v1.18.0

ステータスがすべて準備完了であることがわかったら、起動が成功したことを意味します

7.kubernetesクラスターをテストします

Kubernetesクラスターにポッドを作成し、正常に実行されていることを確認します。

# 拉取nginx 的pod
[root@zjj101 ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
# 查看pod ,发现了一个nginx,等status状态变成running状态后就可以了
[root@zjj101 ~]#  kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-f89759699-rh5lk   1/1     Running   0          2m19s

外部ポートが公開されています。公開しないと、外部ネットワークにアクセスできません。nginxのデフォルトポートは80です。

コマンド:kubectl Exposure Deployment nginx --port = 80 --type = NodePort

[root@zjj101 ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed

外部ポートの表示:kubectl get pod、svc

[root@zjj101 ~]# kubectl get pod,svc
NAME                        READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-rh5lk   1/1     Running   0          5m10s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        15m
service/nginx        NodePort    10.98.67.59   <none>        80:31715/TCP   46s

nginxによって公開されているポートは31715であることがわかります

ブラウザを開いてテストします

zjj101 zjj102 zjj103は、Windowsマシンでホストマッピングを行ったものです。実際、zjj101はマスターマシン、zjj102はnode1マシン、zjj103はnode2マシンです。

http:// zjj101:31715 /

http:// zjj102:31715 /

http:// zjj103:31715 /

画像-20210226200522000

おすすめ

転載: blog.csdn.net/qq_41489540/article/details/114151789