Centos7 搭建 k8s 環(huán)境教程,一次性成功
閱讀本文大概需要 10.5?分鐘。
一. 為什么是k8s v1.16.0?
安裝docker-ce 18.09.9(所有機(jī)器)
設(shè)置k8s環(huán)境前置條件(所有機(jī)器)
安裝k8s v1.16.0 master管理節(jié)點(diǎn)
安裝k8s v1.16.0 node工作節(jié)點(diǎn)
安裝flannel(master)
操作系統(tǒng):win10
虛擬機(jī):virtual box
linux發(fā)行版:CentOS7
linux內(nèi)核(使用uname -r查看):3.10.0-957.el7.x86_64
master和node節(jié)點(diǎn)通信的ip(master):192.168.99.104
二. 安裝docker-ce 18.09.9(所有機(jī)器)
#?安裝docker所需的工具
yum install -y yum-utils device-mapper-persistent-data lvm2
#?配置阿里云的docker源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#?指定安裝這個(gè)版本的docker-ce
yum install -y docker-ce-18.09.9-3.el7
#?啟動(dòng)docker
systemctl enable docker && systemctl start docker
三. 設(shè)置k8s環(huán)境準(zhǔn)備條件(所有機(jī)器)
#?關(guān)閉防火墻
systemctl disable firewalld
systemctl stop firewalld
#?關(guān)閉selinux
#?臨時(shí)禁用selinux
setenforce 0
#?永久關(guān)閉 修改/etc/sysconfig/selinux文件設(shè)置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#?禁用交換分區(qū)
swapoff -a
#?永久禁用,打開/etc/fstab注釋掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
#?修改內(nèi)核參數(shù)
cat </etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
四. 安裝k8s v1.16.0 master管理節(jié)點(diǎn)
1. 安裝kubeadm、kubelet、kubectl
# 執(zhí)行配置k8s阿里云源
cat?</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
# 啟動(dòng)kubelet服務(wù)
systemctl enable kubelet && systemctl start kubelet
2. 初始化k8s
[preflight] You can also perform this action in beforehand using ''kubeadm config images pull,大概需要2分鐘,請(qǐng)耐心等待。#?下載管理節(jié)點(diǎn)中用到的6個(gè)docker鏡像,你可以使用docker images查看到
#?這里需要大概兩分鐘等待,會(huì)卡在[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會(huì)提示你輸入如下命令,執(zhí)行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 記住node加入集群的命令
kubeadm token create --print-join-command
五. 安裝k8s v1.16.0 node工作節(jié)點(diǎn)
1. 安裝kubeadm、kubelet
# 執(zhí)行配置k8s阿里云源
cat?</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
# 啟動(dòng)kubelet服務(wù)
systemctl enable kubelet && systemctl start kubelet
2. 加入集群
# 加入集群,如果這里不知道加入集群的命令,可以登錄master節(jié)點(diǎn),使用kubeadm token create --print-join-command?來(lái)獲取?
kubeadm?join?192.168.99.104:6443?--token ncfrid.7ap0xiseuf97gikl \
????--discovery-token-ca-cert-hash?sha256:47783e9851a1a517647f1986225f104e81dbfd8fb256ae55ef6d68ce9334c6a2
六. 安裝flannel(master機(jī)器)
1. 下載官方fannel配置文件
2. 安裝fannel
kubectl?apply?-f?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
推薦閱讀:
微信掃描二維碼,關(guān)注我的公眾號(hào)
朕已閱?
評(píng)論
圖片
表情

