CentOSはK8S環境チュートリアルを作成します。これは1回限りの成功で、私はそれを収集しました。

**1. k8s v1.16.0はなぜですか? ****

最新バージョンのv1.16.2を試しましたが、インストールが完了していません。kubeadminitステップにインストールした後、次のような多くのエラーが報告されました。ノードxxxが見つかりません。 Centos7は数回再インストールされましたが、それでも解決できません。それをインストールするのに1日かかり、ほとんどあきらめました。後で、インターネット上にあるインストールチュートリアルは基本的にv1.16.0です。v1.16.2の落とし穴だとは思わないので、v1.16.0にダウングレードする予定はありませんでした。 v1.16.0バージョンをインストールしようとしましたが、成功しました。後発者がピットを踏まないように、ここに記録してください。

この記事では、インストール手順は次のとおりです。

ここに重要なステップがあります。マスターとノード間の通信のIPを覚えておいてください。たとえば、私のマスターのIPは192.168.99.104で、ノードのIPは192.168.99.105です。マスターとノードでこれら2つのIPを使用してください。相互に正常にpingを実行できるため、次にk8を構成するときに、マスターのip192.168.99.104を使用する必要があります。

私の環境:

2. docker-ce 18.09.9(すべてのマシン)をインストールします

k8sがインストールされているすべてのマシンは、dockerをインストールする必要があります。コマンドは次のとおりです。

# dockerのインストールに必要なツール
yum install -y yum-utils device-mapper-persistent-data lvm2
# アリババクラウドのドッカーソースを構成する
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# このバージョンのdockerをインストールするように指定します-ce
yum install -y docker-ce-18.09.9-3.el7
# dockerを起動します
systemctl enable docker && systemctl start docker

3. k8s環境準備条件を設定します(すべてのマシン)

k8sをインストールするマシンには、2つのCPUと2g以上のメモリが必要です。これは簡単で、仮想マシンで構成するだけです。次に、次のスクリプトを実行して、いくつかの準備操作を実行します。 k8がインストールされているすべてのマシンには、この手順が必要です。

# ファイアウォールをオフにする
systemctl disable firewalld
systemctl stop firewalld

# selinuxを閉じる
# selinuxを一時的に無効にする
setenforce 0
# 恒久的に近い変更/etc/sysconfig/selinuxファイル設定
sed -i 's/SELINUX=permissive/SELINUX=disabled/'/etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g"/etc/selinux/config

# スワップパーティションを無効にする
swapoff -a
# 完全に無効にし、開く/etc/fstabはスワップラインをコメントアウトしました。
sed -i 's/.*swap.*/#&/'/etc/fstab

# カーネルパラメータを変更する
cat <<EOF >/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF
sysctl --system

4. k8s v1.16.0マスター管理ノードをインストールします

dockerをまだインストールしていない場合は、この記事の2番目のステップを参照して、docker-ce 18.09.9(すべてのマシン)をインストールしてください。 k8s環境準備条件を設定していない場合は、この記事の手順3「k8s環境準備条件(全機)の設定」を参照して実行してください。上記の2つの手順を確認したら、次の手順に進みます。

**1. kubeadm、kubelet、kubectl **をインストールします##

公式のk8sソースはgoogleにあり、中国ではアクセスできないため、ここではAlibaba Cloudyumソースを使用します

# 構成を実行するk8sAlibabaCloudソース
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

# kubeadm、kubectl、kubeletをインストールします
yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0

# kubeletサービスを開始
systemctl enable kubelet && systemctl start kubelet

2. k8sを初期化します

次のコマンドは、k8sに必要なdockerイメージのインストールを開始します。外部のWebサイトにアクセスできないため、このコマンドは国内のAliyunソース(registry.aliyuncs.com/google_containers)を使用します。 **もう1つの非常に重要なことは、ここの--apiserver-advertise-addressは、マスターとノード間で相互にpingできるipを使用していることです。ここは192.168.99.104です。最初はここで一晩詐欺されました、あなたipの実行を自分で変更してください。 **このコマンドを実行すると、 [preflight]でスタックします。 &#39;&#39; kubeadm config imagespullを使用して事前にこのアクションを実行することもできます。約2分かかります。しばらくお待ちください。

# 管理ノードで使用される6つのドッカーイメージをダウンロードします。ドッカーイメージを使用して表示できます
# ここで待つのに約2分かかり、行き詰まります[preflight] You can also perform this action in beforehand using ''kubeadm config images pull
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0--apiserver-advertise-address 192.168.99.104--pod-network-cidr=10.244.0.0/16--token-ttl 0

上記のインストールが完了すると、次のコマンドを入力し、コピーして貼り付けて実行するように求められます。

# 上記のインストールが完了すると、k8sは実行する次のコマンドを入力するように求めます
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3. ノードがクラスターに参加するためのコマンドを覚えておいてください

上記のkubeadminitが正常に実行されると、ノードノードがクラスターに参加するためのコマンドが返されます。後でノードノードで実行されるため、保存する必要があります。忘れた場合は、次のコマンドを使用して取得できます。

kubeadm token create --print-join-command

上に、マスターノードがインストールされています。 kubectl getnodesを使用して確認できます。マスターは現時点ではNotReady状態です。今のところ心配する必要はありません。

画像

5. k8s v1.16.0ノードの作業ノードをインストールします

dockerをまだインストールしていない場合は、この記事の2番目のステップを参照して、docker-ce 18.09.9(すべてのマシン)をインストールしてください。 k8s環境準備条件を設定していない場合は、この記事の手順3「k8s環境準備条件(全機)の設定」を参照して実行してください。上記の2つの手順を確認したら、次の手順に進みます。

**1. kubeadm、kubelet **をインストールします##

# 構成を実行するk8sAlibabaCloudソース
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

# kubeadm、kubectl、kubeletをインストールします
yum install -y  kubeadm-1.16.0-0 kubelet-1.16.0-0

# kubeletサービスを開始
systemctl enable kubelet && systemctl start kubelet

2. クラスターに参加

ここでクラスターに参加するコマンドは人によって異なります。マスターノードにログインし、 kubeadm token create--print-join-commandを使用して取得できます。取得後の実行は以下のとおりです。

# クラスターに参加します。クラスターに参加するコマンドがわからない場合は、マスターノードにログインして、kubeadm tokencreateを使用できます。--print-join-取得するコマンド
kubeadm join 192.168.99.104:6443--token ncfrid.7ap0xiseuf97gikl \
 - - discovery-token-ca-cert-hash sha256:47783e9851a1a517647f1986225f104e81dbfd8fb256ae55ef6d68ce9334c6a2

正常に参加したら、マスターノードで kubectl getnodesコマンドを使用して追加されたノードを表示できます。

6.フランネル(マスターマシン)をインストールします

上記の手順をインストールした後、マシンはセットアップされますが、状態はまだNotReadyです。次の図に示すように、マスターマシンはフランネルドを使用してインストールする必要があります。

20191101095214. png

1. 公式ファンネル構成ファイルをダウンロード

wgetコマンドを使用します。アドレスは(https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)です。このアドレスは中国ではアクセスできないため、前の記事を避けるためにコンテンツをコピーしました。長すぎるので、記事の最後にある8番目のステップ「付録」に貼り付けました。このyml構成ファイルは、国内でアクセスできないアドレス(quay.io)で構成されています。国内でアクセスできるアドレス(quay-mirror.qiniu.com)に変更しました。新しいkube-flannel.ymlファイルを作成し、コンテンツをコピーして貼り付けます。

2. ファンネルを取り付ける

kubectl apply -f kube-flannel.yml

7.完了

この時点で、k8sクラスターがセットアップされます。次の図のノードは準備完了状態にあり、これで完了です。

20191101101725. png

8.付録

これはkube-flannel.ymlファイルの内容です。アクセスできないすべてのアドレス(quay.io)は、中国でアクセスできるアドレス(quay-mirror.qiniu.com)に変更されました。新しいkube-flannel.ymlファイルを作成し、コンテンツをコピーして貼り付けます。

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
 name: psp.flannel.unprivileged
 annotations:
 seccomp.security.alpha.kubernetes.io/allowedProfileNames: docker/default
 seccomp.security.alpha.kubernetes.io/defaultProfileName: docker/default
 apparmor.security.beta.kubernetes.io/allowedProfileNames: runtime/default
 apparmor.security.beta.kubernetes.io/defaultProfileName: runtime/default
spec:
 privileged:false
 volumes:- configMap
 - secret
 - emptyDir
 - hostPath
 allowedHostPaths:- pathPrefix:"/etc/cni/net.d"- pathPrefix:"/etc/kube-flannel"- pathPrefix:"/run/flannel"
 readOnlyRootFilesystem:false
 # Users and groups
 runAsUser:
 rule: RunAsAny
 supplementalGroups:
 rule: RunAsAny
 fsGroup:
 rule: RunAsAny
 # Privilege Escalation
 allowPrivilegeEscalation:false
 defaultAllowPrivilegeEscalation:false
 # Capabilities
 allowedCapabilities:['NET_ADMIN']
 defaultAddCapabilities:[]
 requiredDropCapabilities:[]
 # Host namespaces
 hostPID:false
 hostIPC:false
 hostNetwork:true
 hostPorts:- min:0
 max:65535
 # SELinux
 seLinux:
 # SELinux is unused in CaaSP
 rule:'RunAsAny'---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
 name: flannel
rules:- apiGroups:['extensions']
 resources:['podsecuritypolicies']
 verbs:['use']
 resourceNames:['psp.flannel.unprivileged']- apiGroups:-""
 resources:- pods
 verbs:-get- apiGroups:-""
 resources:- nodes
 verbs:- list
  - watch
 - apiGroups:-""
 resources:- nodes/status
 verbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
 name: flannel
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: flannel
subjects:- kind: ServiceAccount
 name: flannel
 namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
 name: flannel
 namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
 name: kube-flannel-cfg
 namespace: kube-system
 labels:
 tier: node
 app: flannel
data:
 cni-conf.json:|{"name":"cbr0","cniVersion":"0.3.1","plugins":[{"type":"flannel","delegate":{"hairpinMode":true,"isDefaultGateway":true}},{"type":"portmap","capabilities":{"portMappings":true}}]}
 net-conf.json:|{"Network":"10.244.0.0/16","Backend":{"Type":"vxlan"}}---
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: kube-flannel-ds-amd64
 namespace: kube-system
 labels:
 tier: node
 app: flannel
spec:
 selector:
 matchLabels:
  app: flannel
 template:
 metadata:
  labels:
  tier: node
  app: flannel
 spec:
  affinity:
  nodeAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/os
     operator: In
     values:- linux
     - key: beta.kubernetes.io/arch
     operator: In
     values:- amd64
  hostNetwork:true
  tolerations:- operator: Exists
  effect: NoSchedule
  serviceAccountName: flannel
  initContainers:- name: install-cni
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
  command:- cp
  args:--f
  - /etc/kube-flannel/cni-conf.json
  - /etc/cni/net.d/10-flannel.conflist
  volumeMounts:- name: cni
   mountPath:/etc/cni/net.d
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  containers:- name: kube-flannel
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
  command:-/opt/bin/flanneld
  args:---ip-masq
  - - - kube-subnet-mgr
  resources:
   requests:
   cpu:"100m"
   memory:"50Mi"
   limits:
   cpu:"100m"
   memory:"50Mi"
  securityContext:
   privileged:false
   capabilities:
   add:["NET_ADMIN"]
  env:- name: POD_NAME
   valueFrom:
   fieldRef:
    fieldPath: metadata.name
  - name: POD_NAMESPACE
   valueFrom:
   fieldRef:
    fieldPath: metadata.namespace
  volumeMounts:- name: run
   mountPath:/run/flannel
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  volumes:- name: run
   hostPath:
   path:/run/flannel
  - name: cni
   hostPath:
   path:/etc/cni/net.d
  - name: flannel-cfg
   configMap:
   name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: kube-flannel-ds-arm64
 namespace: kube-system
 labels:
 tier: node
 app: flannel
spec:
 selector:
 matchLabels:
  app: flannel
 template:
 metadata:
  labels:
  tier: node
  app: flannel
 spec:
  affinity:
  nodeAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/os
     operator: In
     values:- linux
     - key: beta.kubernetes.io/arch
     operator: In
     values:- arm64
  hostNetwork:true
  tolerations:- operator: Exists
  effect: NoSchedule
  serviceAccountName: flannel
  initContainers:- name: install-cni
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-arm64
  command:- cp
  args:--f
  - /etc/kube-flannel/cni-conf.json
  - /etc/cni/net.d/10-flannel.conflist
  volumeMounts:- name: cni
   mountPath:/etc/cni/net.d
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  containers:- name: kube-flannel
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-arm64
  command:-/opt/bin/flanneld
  args:---ip-masq
  - - - kube-subnet-mgr
  resources:
   requests:
   cpu:"100m"
   memory:"50Mi"
   limits:
   cpu:"100m"
   memory:"50Mi"
  securityContext:
   privileged:false
   capabilities:
    add:["NET_ADMIN"]
  env:- name: POD_NAME
   valueFrom:
   fieldRef:
    fieldPath: metadata.name
  - name: POD_NAMESPACE
   valueFrom:
   fieldRef:
    fieldPath: metadata.namespace
  volumeMounts:- name: run
   mountPath:/run/flannel
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  volumes:- name: run
   hostPath:
   path:/run/flannel
  - name: cni
   hostPath:
   path:/etc/cni/net.d
  - name: flannel-cfg
   configMap:
   name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: kube-flannel-ds-arm
 namespace: kube-system
 labels:
 tier: node
 app: flannel
spec:
 selector:
 matchLabels:
  app: flannel
 template:
 metadata:
  labels:
  tier: node
  app: flannel
 spec:
  affinity:
  nodeAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/os
     operator: In
     values:- linux
     - key: beta.kubernetes.io/arch
     operator: In
     values:- arm
  hostNetwork:true
  tolerations:- operator: Exists
  effect: NoSchedule
  serviceAccountName: flannel
  initContainers:- name: install-cni
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-arm
  command:- cp
  args:--f
  - /etc/kube-flannel/cni-conf.json
  - /etc/cni/net.d/10-flannel.conflist
  volumeMounts:- name: cni
   mountPath:/etc/cni/net.d
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  containers:- name: kube-flannel
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-arm
  command:-/opt/bin/flanneld
  args:---ip-masq
  - - - kube-subnet-mgr
  resources:
   requests:
   cpu:"100m"
   memory:"50Mi"
   limits:
   cpu:"100m"
   memory:"50Mi"
  securityContext:
   privileged:false
   capabilities:
    add:["NET_ADMIN"]
  env:- name: POD_NAME
   valueFrom:
   fieldRef:
    fieldPath: metadata.name
  - name: POD_NAMESPACE
   valueFrom:
   fieldRef:
    fieldPath: metadata.namespace
  volumeMounts:- name: run
   mountPath:/run/flannel
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  volumes:- name: run
   hostPath:
   path:/run/flannel
  - name: cni
   hostPath:
   path:/etc/cni/net.d
  - name: flannel-cfg
   configMap:
   name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: kube-flannel-ds-ppc64le
 namespace: kube-system
 labels:
 tier: node
 app: flannel
spec:
 selector:
 matchLabels:
  app: flannel
 template:
 metadata:
  labels:
  tier: node
  app: flannel
 spec:
  affinity:
  nodeAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/os
     operator: In
     values:- linux
     - key: beta.kubernetes.io/arch
     operator: In
     values:- ppc64le
  hostNetwork:true
  tolerations:- operator: Exists
  effect: NoSchedule
  serviceAccountName: flannel
  initContainers:- name: install-cni
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-ppc64le
  command:- cp
  args:--f
  - /etc/kube-flannel/cni-conf.json
  - /etc/cni/net.d/10-flannel.conflist
  volumeMounts:- name: cni
   mountPath:/etc/cni/net.d
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  containers:- name: kube-flannel
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-ppc64le
  command:-/opt/bin/flanneld
  args:---ip-masq
  - - - kube-subnet-mgr
  resources:
   requests:
   cpu:"100m"
   memory:"50Mi"
   limits:
   cpu:"100m"
   memory:"50Mi"
  securityContext:
   privileged:false
   capabilities:
    add:["NET_ADMIN"]
  env:- name: POD_NAME
   valueFrom:
   fieldRef:
    fieldPath: metadata.name
  - name: POD_NAMESPACE
   valueFrom:
   fieldRef:
    fieldPath: metadata.namespace
  volumeMounts:- name: run
   mountPath:/run/flannel
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  volumes:- name: run
   hostPath:
   path:/run/flannel
  - name: cni
   hostPath:
   path:/etc/cni/net.d
  - name: flannel-cfg
   configMap:
   name: kube-flannel-cfg
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: kube-flannel-ds-s390x
 namespace: kube-system
 labels:
 tier: node
 app: flannel
spec:
 selector:
 matchLabels:
  app: flannel
 template:
 metadata:
  labels:
  tier: node
  app: flannel
 spec:
  affinity:
  nodeAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   nodeSelectorTerms:- matchExpressions:- key: beta.kubernetes.io/os
     operator: In
     values:- linux
     - key: beta.kubernetes.io/arch
     operator: In
     values:- s390x
  hostNetwork:true
  tolerations:- operator: Exists
  effect: NoSchedule
  serviceAccountName: flannel
  initContainers:- name: install-cni
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-s390x
  command:- cp
  args:--f
  - /etc/kube-flannel/cni-conf.json
  - /etc/cni/net.d/10-flannel.conflist
  volumeMounts:- name: cni
   mountPath:/etc/cni/net.d
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  containers:- name: kube-flannel
  image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-s390x
  command:-/opt/bin/flanneld
  args:---ip-masq
  - - - kube-subnet-mgr
  resources:
   requests:
   cpu:"100m"
   memory:"50Mi"
   limits:
   cpu:"100m"
   memory:"50Mi"
  securityContext:
   privileged:false
   capabilities:
    add:["NET_ADMIN"]
  env:- name: POD_NAME
   valueFrom:
   fieldRef:
    fieldPath: metadata.name
  - name: POD_NAMESPACE
   valueFrom:
   fieldRef:
    fieldPath: metadata.namespace
  volumeMounts:- name: run
   mountPath:/run/flannel
  - name: flannel-cfg
   mountPath:/etc/kube-flannel/
  volumes:- name: run
   hostPath:
   path:/run/flannel
  - name: cni
   hostPath:
   path:/etc/cni/net.d
  - name: flannel-cfg
   configMap:
   name: kube-flannel-cfg

Recommended Posts

CentOSはK8S環境チュートリアルを作成します。これは1回限りの成功で、私はそれを収集しました。
Centos7.4環境インストールランプ-php7.0チュートリアル
CentOSはクラウドサービスプラットフォームを構築します
CentOS6.8中国語/英語環境切り替えチュートリアル図
Centos7のインストールに必要なソフトウェア環境
(1)クラスター環境を構築するためのCentos7のインストール
[PHP] CentOSでPHPオペレーティング環境を構築する