**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を使用する必要があります。
私の環境:
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
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
dockerをまだインストールしていない場合は、この記事の2番目のステップを参照して、docker-ce 18.09.9(すべてのマシン)をインストールしてください。 k8s環境準備条件を設定していない場合は、この記事の手順3「k8s環境準備条件(全機)の設定」を参照して実行してください。上記の2つの手順を確認したら、次の手順に進みます。
公式の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
次のコマンドは、k8sに必要なdockerイメージのインストールを開始します。外部のWebサイトにアクセスできないため、このコマンドは国内のAliyunソース(registry.aliyuncs.com/google_containers)を使用します。 **もう1つの非常に重要なことは、ここの--apiserver-advertise-addressは、マスターとノード間で相互にpingできるipを使用していることです。ここは192.168.99.104です。最初はここで一晩詐欺されました、あなたipの実行を自分で変更してください。 **このコマンドを実行すると、 [preflight]でスタックします。 '' 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
上記のkubeadminitが正常に実行されると、ノードノードがクラスターに参加するためのコマンドが返されます。後でノードノードで実行されるため、保存する必要があります。忘れた場合は、次のコマンドを使用して取得できます。
kubeadm token create --print-join-command
上に、マスターノードがインストールされています。 kubectl getnodes
を使用して確認できます。マスターは現時点ではNotReady状態です。今のところ心配する必要はありません。
画像
dockerをまだインストールしていない場合は、この記事の2番目のステップを参照して、docker-ce 18.09.9(すべてのマシン)をインストールしてください。 k8s環境準備条件を設定していない場合は、この記事の手順3「k8s環境準備条件(全機)の設定」を参照して実行してください。上記の2つの手順を確認したら、次の手順に進みます。
# 構成を実行する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
ここでクラスターに参加するコマンドは人によって異なります。マスターノードにログインし、 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
コマンドを使用して追加されたノードを表示できます。
上記の手順をインストールした後、マシンはセットアップされますが、状態はまだNotReadyです。次の図に示すように、マスターマシンはフランネルドを使用してインストールする必要があります。
20191101095214. png
wgetコマンドを使用します。アドレスは(https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml)です。このアドレスは中国ではアクセスできないため、前の記事を避けるためにコンテンツをコピーしました。長すぎるので、記事の最後にある8番目のステップ「付録」に貼り付けました。このyml構成ファイルは、国内でアクセスできないアドレス(quay.io)で構成されています。国内でアクセスできるアドレス(quay-mirror.qiniu.com)に変更しました。新しいkube-flannel.ymlファイルを作成し、コンテンツをコピーして貼り付けます。
kubectl apply -f kube-flannel.yml
この時点で、k8sクラスターがセットアップされます。次の図のノードは準備完了状態にあり、これで完了です。
20191101101725. png
これは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