1. 基本的な環境の準備
1.1 環境の準備
オペレーティング システム: Linux CentOS
CPU名 | インストール済みソフトウェア |
---|---|
k8s-マスター | be apiserver、be controller-manager、be scheduler |
k8s-ノード-1 | kubelet、kube プロキシ、docker |
k8s-ノード-2 | kubelet、kube プロキシ、docker |
1.2 lszrz のインストール
链接:https://pan.baidu.com/s/1e2KCTnnU0dy6y6zA9vlsLw
提取码:qi9j
ステップ 1: lrzsz-0.12.20 パッケージを解凍します。
tar zxvf lrzsz-0.12.20.tar.gz
ステップ 2: インストール パスを構成します。
cd lrzsz-0.12.20/
./configure --prefix=/usr/local/lrzsz
3 番目のステップ: コンパイルしてインストールします。
make & make install
ステップ 4: ソフト リンクを作成します。
cd /usr/bin
ln -s /usr/local/lrzsz/bin/lrz rz
ln -s /usr/local/lrzsz/bin/lsz sz
1.3 Node ノードに Docker をインストールする
链接:https://pan.baidu.com/s/1gHKUMyDohAeBDF0JCWKZJA
提取码:ua6g
最初のステップ: docker 依存関係パッケージをインストールします。
yum localinstall audit-libs-python-2.7.6-3.el7.x86_64.rpm -y
yum localinstall checkpolicy-2.5-4.el7.x86_64.rpm -y
yum localinstall libcgroup-0.41-13.el7.x86_64.rpm -y
yum localinstall libsemanage-python-2.5-8.el7.x86_64.rpm -y
yum localinstall libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm -y
yum localinstall python-IPy-0.75-6.el7.noarch.rpm -y
yum localinstall setools-libs-3.3.8-1.1.el7.x86_64.rpm -y
yum localinstall policycoreutils-python-2.5-17.1.el7.x86_64.rpm -y
yum localinstall container-selinux-2.19-2.1.el7.noarch.rpm -y
yum localinstall docker-ce-17.12.0.ce-1.el7.centos.x86_64.rpm -y
ステップ 2: /etc/docker/daemon.json ファイルを編集します。
{
"insecure-registries":[],
"hosts": ["unix:///var/run/docker.sock"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"],
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "10"
},
"live-restore": true
}
ステップ 3: docker サービスを再起動します。
systemctl daemon-reload
systemctl restart docker
2. マスター ノードをデプロイする
2.1 etcd のインストール
链接:https://pan.baidu.com/s/1mlC0oOQ1z6Ddu8fbyHcEGQ
提取码:teqx
ステップ 1: etcd-v3.3.9-linux-amd64.tar.gz を解凍します。
tar zxvf etcd-v3.3.9-linux-amd64.tar.gz
ステップ 2: 解凍後、etcdctl と etcd を /usr/bin ディレクトリにコピーします。
cd etcd-v3.3.9-linux-amd64
mv etcdctl etcd /usr/bin
ステップ 3: /usr/lib/systemd/system/etcd.service ファイルを編集します。
[Unit]
Description=Etcd Server
After=network.target
[Service]
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/bin/etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2389
Restart=on-failure
[Install]
WantedBy=multi-user.target
ステップ 4: etcd サービスを開始します。
systemctl daemon-reload
systemctl start etcd
systemctl status etcd
systemctl enable etcd
ステップ 5: etcd クラスターのステータスを確認します。
etcdctl cluster-health
2.2 k8s のインストール
链接:https://pan.baidu.com/s/1bL5w5Z_QGp-dvnoQeaNX7Q
提取码:dr3c
k8s-master ノードに K8S をインストールする手順:
ステップ 1: kubernetes-server-linux-amd64.tar.gz を解凍します;
ステップ 2: /kubernetes/server/bin ディレクトリに入り、kube-apiserver と kube-controller -manager を追加します、kube-scheduler、および kubectl 実行ファイルが /usr/bin ディレクトリにコピーされます。
ステップ 3: kube-apiserver、kube-controller-manager、および kube-scheduler サービスを構成します。
2.2.1 kube-apiserver の構成
- kube-apiserver サービスを定義します。
vi /usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
After=etcd.service
Wants=etcd.service
[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
[Install]
WantedBy=multi-user.target
- kube-apiserver のパラメーター構成情報を定義します。
mkdir /etc/kubernetes
vi /etc/kubernetes/apiserver
KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,DefaultStorageClass,ResourceQuota --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
2.2.2 kube-controller-manager の設定
- kube-controller-manager サービスを定義します。
vi /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
- kube-controller-manager のパラメーター構成情報を定義します。
vi /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://k8s-master:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
2.2.3 kube-scheduler の構成
- kube-scheduler サービスを定義します。
vi /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
- kube-scheduler のパラメーター構成情報を定義します。
vi /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--master=http://k8s-master:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
サービスの構成が完了したら、すべてのサービスを開始し、ブートを自動的に開始するように設定します。
systemctl daemon-reload
systemctl start kube-apiserver kube-controller-manager kube-scheduler
systemctl status kube-apiserver kube-controller-manager kube-scheduler
systemctl enable kube-apiserver kube-controller-manager kube-scheduler
3. ノードノードをデプロイする
3.1 k8s のインストール
ノード node への k8s のデプロイも、次の 3 つの手順に従います:
ステップ 1: kubernetes-server-linux-amd64.tar.gz を解凍します;
ステップ 2: 2) kubernetes/server/bin ディレクトリに入り、kubelet、kube -proxy の実行ファイルが /usr/bin ディレクトリにコピーされます;
ステップ 3: 3) kubelet および kube-proxy サービスを構成します。
3.1.1 kubelets の設定
- kubelet サービスを定義します。
vi /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
- kubelet のパラメーター構成情報を定義します。
mkdir -p /var/lib/kubelet
mkdir -p /etc/kubernetes
vi /etc/kubernetes/kubelet
KUBELET_ARGS="--kubeconfig=/etc/kubernetes/kubeconfig --hostname-override=k8s-node-1 --logtostderr=true --log-dir=/var/log/kubernetes --v=2 --fail-swap-on=false"
上記の--hostname-override
パラメーターは、現在のノード node が配置されているホストの IP アドレスまたはホスト名を指定します。
- kubelet が apiserver に接続するためのパラメーター情報を構成します。
vi /etc/kubernetes/kubeconfig
apiVersion: v1
kind: Config
clusters:
- cluster:
server: http://k8s-master:8080
name: local
contexts:
- context:
cluster: local
name: mycontext
current-context: mycontext
3.1.2 kube-proxy の設定
- kube-proxy サービスを定義します。
vi /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.service
Requires=network.service
[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
KillMode=process
[Install]
WantedBy=multi-user.target
- kube-proxy のパラメーター構成情報を定義します。
vi /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--master=http://k8s-master:8080 --hostname-override=k8s-node-1 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"
上記の--hostname-override
パラメーターは、現在のノード node が配置されているホストの IP アドレスまたはホスト名を指定します。
すべてのサービス構成が完了したら、すべてのサービスを開始し、自動的に開始するように設定します。
systemctl daemon-reload
systemctl start kubelet kube-proxy
systemctl status kubelet kube-proxy
systemctl enable kubelet kube-proxy
3.2 クラスターのヘルスチェック
マスター ノードで次のコマンドを実行します。
4番目に、基本イメージをインストールします
4.1 centos7-orcalejdk8 のインストール
プロジェクト開始時にjdk環境が必要なため、事前にノードnodeにcentos7-oraclejdk8.tarイメージを用意しておく必要があります。
cd /root/k8s/imags/
docker load < centos7-oraclejdk8.tar
docker images
docker tag [镜像ID] centos7-orcalejdk8:v1
注:docker load
コマンドを実行すると、次のエラーが発生する場合があります。
次のコマンドに変更できます。
cat [镜像压缩包] | docker import – [image_name:tag]
4.2一時停止amd64
链接:https://pan.baidu.com/s/1fWeUr7SQ4qPaijlCDs8vhw
提取码:37h5
pause-amd64 は Kubernetes インフラストラクチャの一部であり、Kubernetes クラスター内のポッド間のネットワーク通信を実装するために使用されるため、pause-amd64 イメージをノード node にインストールする必要があります。
docker load < pause-amd64.tar
docker images
docker tag [镜像ID] gcr.io/google_containers/pause-amd64:3.0
実行効果:
上記の gcr.io/google_containers/pause-amd64 のイメージ名は、他の名前にすることはできません。
5.クラスターテスト
1) 最初に Web プロジェクトを準備してからパッケージ化し、k8s-node-1 および k8s-node-2 ノードの特定のディレクトリにアップロードします。
2) このディレクトリに新しい Dockerfile を作成します。その内容は次のとおりです。
FROM centos7-orcalejdk8:v1
ENV CSMBP_SLEEP 0
ADD *.war /app.war
RUN sh -c 'touch /app.war'
VOLUME /tmp
EXPOSE 8081
CMD echo "The application will start in ${CSMBP_SLEEP}s..." && \
sleep ${CSMBP_SLEEP} && \
java -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -jar /app.war
上記のEXPOSE
パラメーターは、Web アプリケーションのポート 8081 をホストのポート 8081 にマップするように指定しているため、クライアントはこのポートを介して Web サービスにアクセスできます。
3) 次のdocker build
コマンドを実行して、イメージをパッケージ化します。
docker build -t [镜像名:版本号] .
4) プロジェクトの配置ファイルを作成します。
apiVersion: v1
kind: ReplicationController
metadata:
name: web-rc
spec:
replicas: 1
selector:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: 镜像名:版本号
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
spec:
selector:
app: web
type: NodePort
ports:
- port: 8081
targetPort: 8081
nodePort: 30081
5) 展開操作を実行します。
kubectl apply –f web.yaml
ここまででK8Sの基本環境が構築できました。続いてK8S環境関連のプラグイン(個人倉庫、ダッシュボード等)のインストールです。