環境の説明:
ホスト名 | オペレーティングシステムバージョン | ip | ドッカーバージョン | kubeletバージョン | kubeadmバージョン | kubectlバージョン | フランネルバージョン | 備考 |
---|---|---|---|---|---|---|---|---|
マスター | セントス7.6.1810 | 172.27.9.131 | ドッカー18.09.6 | V1.14.2 | V1.14.2 | V1.14.2 | V0.11.0 | マスターホスト |
node01 | Centos 7.6.1810 | 172.27.9.135 | Docker 18.09.6 | V1.14.2 | V1.14.2 | V1.14.2 | V0.11.0 | ノードノード |
node02 | Centos 7.6.1810 | 172.27.9.136 | Docker 18.09.6 | V1.14.2 | V1.14.2 | V1.14.2 | V0.11.0 | ノードノード |
Centos7.6のインストールの詳細については、以下を参照してください。 [Centos7.6オペレーティングシステムのインストールと最適化の記録](https://blog.51cto.com/3241766/2398136)
Kubernetesという名前は、「ヘルムスマン」を意味するギリシャ語に由来し、「マネージャー」や「政府」などの言葉の由来でもあります。 k8sはKubernetesの略語です(真ん中の8文字の「ubernete」の代わりに数字「8」を使用してください)
**はじめに:**この記事では、kudeadmを使用してcentos7.6にkubernetes v1.14.2クラスターをインストールします(現在、centosとkubernetesの両方が最新バージョンです)。これは5つの部分に分かれています。
**1.Dockerのインストール; **
**2.k8sインストールの準備; **
**3.マスターノードのインストール; **
**4、ノードノードのインストール; **
**5、ダッシュボードのインストール; **
**6.クラスターテスト。 ****
すべてのノードでdockerをインストールする必要があります
[ root@centos7 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[ root@centos7 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[ root@centos7 ~]# yum list docker-ce --showduplicates | sort -r
[ root@centos7 ~]# yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io
インストール用に指定されたdockerのバージョンは18.09.6です。このバージョンは現在最新バージョンであるため、バージョンを指定せずに直接インストールできます。
yum install -y docker-ce docker-ce-cli containerd.io
[ root@centos7 ~]# systemctl start docker
[ root@centos7 ~]# systemctl enable docker
[ root@centos7 ~]# yum -y install bash-completion
[ root@centos7 /]# source /etc/profile.d/bash_completion.sh
Docker Hubサーバーは海外にあるため、イメージのダウンロードに時間がかかります。イメージアクセラレータを構成できます。主なアクセラレータは、中国レジストリミラー、Alibaba Cloudアクセラレータ、およびDockerによって正式に提供されているDaoCloudアクセラレータです。この記事では、Alibabaアクセラレータの構成を例として取り上げます。
ログインアドレスは次のとおりです。[https://cr.console.aliyun.com](https://cr.console.aliyun.com/)、登録していない場合は、最初にAlibabaCloudアカウントを登録できます
demo.jsonファイルを構成します
[ root@centos7 ~]# mkdir -p /etc/docker
[ root@centos7 ~]# tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors":["https://v16stybc.mirror.aliyuncs.com"]}
EOF
サービスを再開します
[ root@centos7 ~]# systemctl daemon-reload
[ root@centos7 ~]# systemctl restart docker
アクセラレータの構成が完了しました
[ root@centos7 ~]# docker --version
[ root@centos7 ~]# docker run hello-world
dockerのバージョンを照会し、コンテナーhello-worldを実行して、dockerが正常にインストールされているかどうかを確認します。
Centosのインストールでは、ファイアウォールとselinuxが無効になり、Aliソースが設定されています。マスターノードとノードノードの両方が、操作のこの部分を実行します。
[ root@centos7 ~]# hostnamectl set-hostname master
[ root@centos7 ~]# more /etc/hostname
master
終了して再度ログインすると、新しく設定されたホスト名マスターが表示されます
[ root@master ~]# cat >>/etc/hosts << EOF
172.27.9.131 master
172.27.9.135 node01
172.27.9.136 node02
EOF
[ root@master ~]# cat /sys/class/net/ens33/address
[ root@master ~]# cat /sys/class/dmi/id/product_uuid
各ノードのmacとuuidが一意であることを確認してください
[ root@master ~]# swapoff -a
再起動して有効にする必要がある場合は、スワップを無効にした後で構成ファイル/ etc / fstabを変更し、スワップをコメントする必要があります。
[ root@master ~]# sed -i.bak '/swap/s/^/#/'/etc/fstab
[ root@master ~]# sysctl net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables =1[root@master ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-ip6tables =1
[ root@master ~]# cat <<EOF >/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF
[ root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf
demo.jsonを変更し、「exec-opts」を追加します:["native.cgroupdriver = systemd" '
[ root@master ~]# more /etc/docker/daemon.json
{" registry-mirrors":["https://v16stybc.mirror.aliyuncs.com"],"exec-opts":["native.cgroupdriver=systemd"]}
[ root@master ~]# systemctl daemon-reload
[ root@master ~]# systemctl restart docker
cgroupdriverは、警告を排除するように変更されています。
WARNING IsDockerSystemdCheck: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[ root@master ~]# cat <<EOF >/etc/yum.repos.d/kubernetes.repo
[ kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[ root@master ~]# yum clean all
[ root@master ~]# yum -y makecache
[ root@master ~]# yum list kubelet --showduplicates | sort -r
最新バージョンは1.14.2で、dockerバージョン1.13.1、17.03、17.06、17.09、18.06、18.09をサポートしています。
[ root@master ~]# yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2
バージョンを指定せずに「yuminstall-y kubelet kubeadm kubectl」を直接実行すると、デフォルトで最新バージョンの1.14.2がインストールされます。2つの方法の結果は同じです。
kubeletを起動し、起動するように設定します
[ root@master ~]# systemctl enable kubelet && systemctl start kubelet
[ root@master ~]# echo "source <(kubectl completion bash)">>~/.bash_profile
[ root@master ~]# source .bash_profile
ほとんどすべてのKubernetesインストールコンポーネントとDockerイメージは、goolge自身のWebサイトに配置されています。直接アクセスすると、ネットワークの問題が発生する可能性があります。ここでの解決策は、Alibaba Cloudミラーウェアハウスからイメージをダウンロードし、ローカルにプルして、デフォルトのイメージタグに戻すことです。 。
[ root@master ~]# more image.sh
#! /bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.14.2
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)for imagename in ${images[@]};do
docker pull $url/$imagename
docker tag $url/$imagename k8s.gcr.io/$imagename
docker rmi -f $url/$imagename
done
urlはAlibabaCloudミラーウェアハウスのアドレスであり、バージョンはkubernetesのインストール済みバージョンです。
スクリプトimage.shを実行して、指定されたバージョンの画像をダウンロードします
[ root@master ~]# ./image.sh
[ root@master ~]# docker images
[ root@master ~]# kubeadm init --apiserver-advertise-address 172.27.9.131--pod-network-cidr=10.244.0.0/16
apiserver-advertise-addressはマスターのインターフェースを指定し、pod-network-cidrはポッドネットワークの範囲を指定し、ここではフランネルネットワークソリューションが使用されます。
kubeadm joinの出力を記録します。後でこのコマンドを使用して、各ノードをクラスターに追加します。
[ root@master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf">>~/.bash_profile
[ root@master ~]# source .bash_profile
この記事のすべての操作はrootユーザーの下で実行されます。root以外のユーザーの場合は、次の操作を実行します。
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
[ root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
汚染:汚染の意味。ノードが汚染されている場合、ポッドはこのノードで実行できません
デフォルトでは、クラスターはマスターでポッドをスケジュールしません。マスターでポッドをスケジュールする場合は、次の操作を実行できます。
汚れを確認してください:
[ root@master ~]# kubectl describe node master|grep -i taints
Taints: node-role.kubernetes.io/master:NoSchedule
デフォルトの汚れを削除します:
[ root@master ~]# kubectl taint nodes master node-role.kubernetes.io/master-
node/master untainted
文法:
kubectl taint node [node] key=value[effect]
その中で[effect]可能な値:[ NoSchedule | PreferNoSchedule | NoExecute ]
NoSchedule:スケジュールしてはいけません
PreferNoSchedule:スケジュールしないようにしてください
NoExecute:スケジュールしないだけでなく,また、ノード上の既存のポッドを削除します
塗抹標本
[ root@master ~]# kubectl taint node master key1=value1:NoSchedule
node/master tainted
[ root@master ~]# kubectl describe node master|grep -i taints
Taints: key1=value1:NoSchedule
キーはkey1、値はvalue1(値は空にすることができます)であり、効果はNoScheduleです。これは、スケジュールされてはならないことを意味します。
汚れを取り除く:
[ root@master ~]# kubectl taint nodes master key1-
node/master untainted
[ root@master ~]# kubectl describe node master|grep -i taints
Taints:<none>
指定されたキーのすべての効果を削除します。「-」は、key1をキーとしてすべての汚れを削除することを意味します
マスターノードと同じ
マスターノードと同じ
以下の操作はマスターで実行されます
[ root@master ~]# kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
j5eoyz.zu0x6su7wzh752b3 <invalid>2019-06-04T17:40:41+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
初期化時のトークンの有効期限が切れていることがわかりました
[ root@master ~]# kubeadm token create
1 zl3he.fxgz2pvxa3qkwxln
[ root@master ~]# openssl x509 -pubkey -in/etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null| \
openssl dgst -sha256 -hex | sed 's/^.* //'
ノードノードで次の操作を実行します。
[ root@node01 ~]# kubeadm join 172.27.9.131:6443--token 1zl3he.fxgz2pvxa3qkwxln --discovery-token-ca-cert-hash sha256:5f656ae26b5e7d4641a979cbfdffeb7845cc5962bbfcd1d5435f00a25c02ea50
[ root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
接続がタイムアウトした場合は、さらに数回試すことができます
sed -i 's/k8s.gcr.io/registry.cn-hangzhou.aliyuncs.com\/kuberneters/g' kubernetes-dashboard.yaml
デフォルトのミラーウェアハウスネットワークにアクセスできないため、Aliミラーに変更されます
sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml
NodePortを構成し、https:// NodeIp:NodePortを介して外部からダッシュボードにアクセスします。現時点では、ポートは30001です。
cat >> kubernetes-dashboard.yaml << EOF
---
# - - - - - - - - - - - - - - - - - - - dashboard-admin ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: dashboard-admin
subjects:- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
EOF
ダッシュボードにログインするためのスーパー管理者アカウントを作成します
[ root@master ~]# kubectl apply -f kubernetes-dashboard.yaml
[ root@master ~]# kubectl get deployment kubernetes-dashboard -n kube-system
[ root@master ~]# kubectl get pods -n kube-system -o wide
[ root@master ~]# kubectl get services -n kube-system
kubectl describe secrets -n kube-system dashboard-admin
トークンは次のとおりです。
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4ta3Q5eDciLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYzI2MjZiYTUtOTE5Ny0xMWU5LTk2OTQtMDAwYzI5ZDk5YmEzIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.XnBTkkMNQx_hKlTml7B-D1Ip-hp-WFi1mgjgx2E_SHbaRJluLN5qXWLsBAPl1Cgp-IY5ujg9pYePAZL2GDYyjnCaMiFmQsRW-zbNfkyYfPWje8MtCxJqoILTlCxsa5apwWsKdbsW_X8moMC4cM92hApQshn_-x-V7cxydEKuQPrB3PfQ7ReNMM5VCj4rexAh9Qr7I1wEHFa0KX1XaDRiedjWgXFKU7kWX2VQ3vwnfRdpKq_r0vlDSQRVdrMDPT1BHuBaUn8Gz-EdLR3qUy5vlZbzo1UFvxuL2enoZxntHZmnP1vg4552HROeEJhigdtRSbDvxHTEGWT3A67faha-Kg
https://NodeIp:30001
アクセスするにはFirefoxを使用してください
トークン経由でログイン
ダッシュボードは、クラスター管理、ワークロード、サービス検出、[負荷分散](https://cloud.tencent.com/product/clb?from=10680)、ストレージ、辞書構成、ログビューなどの機能を提供します。
[ root@master ~]# kubectl run httpd-app --image=httpd --replicas=3
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/httpd-app created
コマンドラインを介してapacheサービスを展開する
cat >> nginx.yml << EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas:3
template:
metadata:
labels:
app: nginx
spec:
restartPolicy: Always
containers:- name: nginx
image: nginx:latest
EOF
[ root@master ~]# kubectl apply -f nginx.yml
deployment.extensions/nginx created
構成ファイルを介してnginxサービスをデプロイします
[ root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 47h v1.14.2
node01 Ready <none> 22h v1.14.2
node02 Ready <none> 6h55m v1.14.2
[ root@master ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default httpd-app-6df58645c6-42zmc 1/1 Running 0 176m
default httpd-app-6df58645c6-g6bkc 1/1 Running 0 176m
default httpd-app-6df58645c6-kp8tl 1/1 Running 0 176m
default nginx-9d4cf4f77-dft2f 1/1 Running 0 18m
default nginx-9d4cf4f77-dztxq 1/1 Running 0 18m
default nginx-9d4cf4f77-l9gdh 1/1 Running 0 18m
kube-system coredns-fb8b8dccf-bxvrz 1/1 Running 1 47h
kube-system coredns-fb8b8dccf-mqvd8 1/1 Running 1 47h
kube-system etcd-master 1/1 Running 3 47h
kube-system kube-apiserver-master 1/1 Running 3 47h
kube-system kube-controller-manager-master 1/1 Running 4 47h
kube-system kube-flannel-ds-amd64-lkh5n 1/1 Running 0 6h55m
kube-system kube-flannel-ds-amd64-pv5ll 1/1 Running 1 24h
kube-system kube-flannel-ds-amd64-wnn5g 1/1 Running 1 22h
kube-system kube-proxy-42vb5 1/1 Running 3 47h
kube-system kube-proxy-7nrfk 1/1 Running 0 6h55m
kube-system kube-proxy-x7dmk 1/1 Running 1 22h
kube-system kube-scheduler-master 1/1 Running 4 47h
[ root@master ~]# kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
httpd-app 3/333 178m
nginx 3/333 19m
[ root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
httpd-app-6df58645c6-42zmc 1/1 Running 0 179m 10.244.0.6 master <none><none>
httpd-app-6df58645c6-g6bkc 1/1 Running 0 179m 10.244.1.2 node01 <none><none>
httpd-app-6df58645c6-kp8tl 1/1 Running 0 179m 10.244.2.2 node02 <none><none>
nginx-9d4cf4f77-dft2f 1/1 Running 0 20m 10.244.0.7 master <none><none>
nginx-9d4cf4f77-dztxq 1/1 Running 0 20m 10.244.2.3 node02 <none><none>
nginx-9d4cf4f77-l9gdh 1/1 Running 0 20m 10.244.1.3 node01 <none><none>[root@master ~]#
nginxとhttpdの3つのレプリカポッドが3つのノードに均等に分散されていることがわかります。
[ root@master ~]# kubectl describe deployments
[ root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
この時点で、Centos 7.6でのk8s(v1.14.2)クラスターの展開は完了しています。
この記事のすべてのスクリプトと構成ファイルはgithubにアップロードされています:[https://github.com/loong576/Centos7.6-install-k8s-v1.14.2-cluster.git](https://github.com/loong576/Centos7.6-install-k8s-v1.14.2-cluster.git)
この記事の参照:
1. https://docs.docker.com/install/linux/docker-ce/centos;
2. https://kubernetes.io/docs/setup/independent/install-kubeadm;
3. https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm;
4. https://github.com/coreos/flannel;
5. https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#external-dependencies;
6. https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/;
Recommended Posts