インプリント
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です。
工法参考:
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ツールを使用します。
次のものは必ずしも上記のコンソールと同じではありません。確認することをお勧めします
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 /