kubernetes v1.20.1 的安装

This commit is contained in:
huanqing.shao
2020-12-28 21:13:38 +08:00
parent 64a1a31147
commit d9dc084620
8 changed files with 6311 additions and 192 deletions

View File

@ -0,0 +1,115 @@
<template>
<div style="border: solid 1px #f2be45; background-color: rgba(242, 190, 69, 0.1); padding: 1rem;">
<div v-show="!envOk" key="not">
<!-- <grid :rwd="{compact: 'stack'}">
<grid-item size="2/3" :rwd="{tablet: '1/1', compact: '1/1'}" style="padding: 1rem 0 1rem 1rem;"> -->
<div>
<p style="color: red">请认真核对如下选项{{envCount}} 个都选中后才能显示如何安装</p>
<div style="overflow: hidden; padding: 20px 0 0 20px; margin-top: 1rem; margin-bottom: 20px; border: 1px solid #d7dae2;">
<b-form>
<b-form-group label="选中后显示 安装 docker/kubelet 的文档">
<b-form-checkbox-group id="checkbox-group-2" v-model="form.checked" name="flavour-2">
<b-form-checkbox value="centos">我的任意节点操作系统为 CentOS 7.8 或者 CentOS Stream 8</b-form-checkbox><br/>
<b-form-checkbox value="cpu">我的任意节点 CPU 内核数量大于等于 2且内存大于等于 4G</b-form-checkbox><br/>
<b-form-checkbox value="hostname">我的任意节点 hostname 不是 localhost且不包含下划线小数点大写字母</b-form-checkbox><br/>
<b-form-checkbox value="ipaddress">我的任意节点都有固定的内网 IP 地址</b-form-checkbox><br/>
<b-form-checkbox value="single_network_card">我的任意节点都只有一个网卡如果有特殊目的我可以在完成 K8S 安装后再增加新的网卡</b-form-checkbox><br/>
<b-form-checkbox value="networkcard">我的任意节点上 <a href="#检查网络">Kubelet使用的 IP 地址</a> 可互通无需 NAT 映射即可相互访问且没有防火墙安全组隔离</b-form-checkbox><br/>
</b-form-checkbox-group>
</b-form-group>
</b-form>
</div>
</div>
<!-- </grid-item>
<grid-item size="1/3" :rwd="{tablet: '1/1', compact: '0/1'}" style="padding: 2rem 1rem 1rem 1rem;">
<AdSenseSquare/>
</grid-item>
</grid> -->
</div>
<div v-show="envOk" key="ok">
<b-button style="margin-top: 10px;" @click="review" variant="info">再看看我是否符合安装条件</b-button>
<slot></slot>
</div>
</div>
</template>
<script>
const ENV_COUNT = 6
export default {
props: {
type: {type: String, required: true}
},
data () {
let validateEnv = (rule, value, callback) => {
if (value.length < ENV_COUNT) {
callback(new Error('请确认您的环境符合上述条件'));
} else {
callback();
}
};
return {
form: {
checked: []
},
envCount: ENV_COUNT,
rules: {
checked: [{validator: validateEnv, trigger: 'change'}]
}
}
},
computed: {
envOk () {
if (this.form.checked.length === ENV_COUNT) {
return true
}
return false
}
},
mounted () {
},
watch: {
'form.checked' () {
if (this.form.checked.length === ENV_COUNT) {
}
},
envOk () {
if (this.envOk) {
this.$bvToast.toast(`如果您符合刚才 ${ENV_COUNT} 个条件,请继续安装`, {
title: '完成环境检查',
variant: 'success',
autoHideDelay: 5000,
})
this.$sendGaEvent('install-' + this.type, 'envOk-' + this.type, '已确认环境符合条件-' + this.type)
}
}
},
methods: {
canSlideNext (currentName) {
if (currentName === 'step1' && this.form.checked.length < ENV_COUNT) {
this.$refs.envForm.validate(valid => {
})
return { flag: false, message: '请翻到本页最下方,并确认您的环境符合要求的条件' }
}
return { flag: true, message: 'can slide next' }
},
review () {
this.form.checked = []
this.$sendGaEvent('install-' + this.type, 'envReview-' + this.type, '回顾安装条件-' + this.type)
}
}
}
</script>
<style>
</style>

View File

@ -0,0 +1,16 @@
# This section includes base Calico installation configuration.
# For more information, see: https://docs.projectcalico.org/v3.17/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 192.168.0.0/16
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()

File diff suppressed because it is too large Load Diff

View File

@ -16,6 +16,7 @@ fi
# 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
rm -f ./kubeadm-config.yaml
cat <<EOF > ./kubeadm-config.yaml
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v${1}
@ -25,11 +26,20 @@ networking:
serviceSubnet: "10.96.0.0/16"
podSubnet: "${POD_SUBNET}"
dnsDomain: "cluster.local"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF
# kubeadm init
# 根据您服务器网速的情况,您需要等候 3 - 10 分钟
echo ""
echo "抓取镜像,请稍候..."
kubeadm config images pull --config=kubeadm-config.yaml
echo ""
echo "初始化 Master 节点"
kubeadm init --config=kubeadm-config.yaml --upload-certs
# 配置 kubectl
@ -39,7 +49,10 @@ cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件
# 参考文档 https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onpremises
echo "安装calico-3.13.1"
rm -f calico-3.13.1.yaml
wget https://kuboard.cn/install-script/calico/calico-3.13.1.yaml
kubectl apply -f calico-3.13.1.yaml
echo ""
echo "安装calico-3.17.1"
rm -f calico-3.17.1.yaml
kubectl create -f https://kuboard.cn/install-script/v1.20.x/calico-operator.yaml
wget https://kuboard.cn/install-script/v1.20.x/calico-custom-resources.yaml
sed -i "s#192.168.0.0/16#${POD_SUBNET}#" calico-custom-resources.yaml
kubectl create -f calico-custom-resources.yaml

View File

@ -2,61 +2,54 @@
# 在 master 节点和 worker 节点都要执行
# 安装 docker
# 安装 containerd
# 参考文档如下
# https://docs.docker.com/install/linux/docker-ce/centos/
# https://docs.docker.com/install/linux/linux-postinstall/
# https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd
# 卸载旧版本
apt-get remove -y docker \
docker-client \
docker-client-latest \
docker-ce-cli \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 设置 apt-get repository
apt-get update && apt-get install -y apt-transport-https lvm2
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt-get -y update
# 安装并启动 docker
apt-get install -y docker-ce=5:20.10.1~3-0~ubuntu-focal docker-ce-cli=5:20.10.1~3-0~ubuntu-focal containerd.io=
mkdir /etc/docker || true
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["${REGISTRY_MIRROR}"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
mkdir -p /etc/systemd/system/docker.service.d
sudo modprobe overlay
sudo modprobe br_netfilter
# Setup required sysctl params, these persist across reboots.
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
# Apply sysctl params without reboot
sysctl --system
# 卸载旧版本
yum remove -y containerd.io
# 设置 yum repository
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 containerd
yum update -y && sudo yum install -y containerd.io-1.4.3
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i "s#k8s.gcr.io#registry.aliyuncs.com/k8sxio#g" /etc/containerd/config.toml
sed -i '/containerd.runtimes.runc.options/a\ \ \ \ \ \ \ \ \ \ \ \ SystemdCgroup = true' /etc/containerd/config.toml
sed -i "s#https://registry-1.docker.io#${REGISTRY_MIRROR}#g" /etc/containerd/config.toml
# Restart Docker
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
systemctl restart containerd
# 安装 nfs-utils
# 必须先安装 nfs-utils 才能挂载 nfs 网络存储
apt-get install -y nfs-utils
apt-get install -y wget
yum install -y nfs-utils
yum install -y wget
# 关闭 防火墙
systemctl stop firewalld
@ -71,42 +64,30 @@ swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
# 修改 /etc/sysctl.conf
# 如果有配置,则修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
# 可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p
# 配置K8S的apt-get源
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
# 配置K8S的yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 卸载旧版本
apt-get remove -y kubelet kubeadm kubectl
yum remove -y kubelet kubeadm kubectl
# 安装kubelet、kubeadm、kubectl
# 将 ${1} 替换为 kubernetes 版本号,例如 1.19.0
apt-get install -y kubelet=${1}-00 kubeadm=${1}-00 kubectl=${1}-00
# 将 ${1} 替换为 kubernetes 版本号,例如 1.20.1
yum install -y kubelet-${1} kubeadm-${1} kubectl-${1}
crictl config runtime-endpoint /run/containerd/containerd.sock
# 重启 docker并启动 kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet
docker version
containerd --version
kubelet --version

File diff suppressed because it is too large Load Diff

View File

@ -2,20 +2,20 @@
vssueId: 15
# layout: StepLayout
sharingTitle: K8S入门第一步---安装装不好还有人免费远程协助更有K8S免费教程提供你还在等什么
description: Kubernete安装文档_Kubernetes最新稳定版v1.20.x的快速安装文档_该文档由众多网友验证并在线提出修改意见_持续不断地更新和完善_并且通过QQ群提供免费在线答疑的服务
description: Kubernete安装文档_Kubernetes最新稳定版v1.19.x的快速安装文档_该文档由众多网友验证并在线提出修改意见_持续不断地更新和完善_并且通过QQ群提供免费在线答疑的服务
meta:
- name: keywords
content: Kubernetes安装,K8S安装,kubeadm,Kubernetes 安装,K8S 安装,k8s搭建
---
# 使用kubeadm安装kubernetes_v1.20.x
# 使用kubeadm安装kubernetes_v1.19.x
<AdSenseTitle/>
## 文档特点
<div style="min-height: 612px;">
<InstallBanner version="v1.20.x" updateCount="89"/>
<InstallBanner version="v1.19.x" updateCount="89"/>
</div>
参考此免费文档98%以上的概率,您能够顺利完成 K8S 安装极个别的问题可以到QQ群里免费答疑。
@ -50,7 +50,7 @@ meta:
**安装后的软件版本为**
* Kubernetes v1.20.x
* Kubernetes v1.19.x
* calico 3.13.1
* nginx-ingress 1.5.5
* Docker 19.03.11
@ -181,8 +181,8 @@ default via 172.21.0.1 dev eth0
<b-tabs content-class="mt-3">
<b-tab title="快速安装" active>
**请将脚本最后的 1.20.0 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.20.x 不要替换</font>
**请将脚本最后的 1.19.5 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.19.x 不要替换</font>
> docker hub 镜像请根据自己网络的情况任选一个
> * 第四行为腾讯云 docker hub 镜像
@ -191,7 +191,7 @@ default via 172.21.0.1 dev eth0
> * 第十行为阿里云 docker hub 镜像
``` sh
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.20.0 用于指定 kubenetes 版本,支持所有 1.20.x 版本的安装
# 最后一个参数 1.19.5 用于指定 kubenetes 版本,支持所有 1.19.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
@ -200,13 +200,13 @@ default via 172.21.0.1 dev eth0
# export REGISTRY_MIRROR="https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"
# 阿里云 docker hub 镜像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.20.x/install_kubelet.sh | sh -s 1.20.0
curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.5
```
</b-tab>
<b-tab title="手动安装">
手动执行以下代码,结果与快速安装相同。<font color="red">***请将脚本第79行已高亮的 ${1} 替换成您需要的版本号,例如 1.20.0***</font>
手动执行以下代码,结果与快速安装相同。<font color="red">***请将脚本第79行已高亮的 ${1} 替换成您需要的版本号,例如 1.19.5***</font>
> docker hub 镜像请根据自己网络的情况任选一个
> * 第四行为腾讯云 docker hub 镜像
@ -214,7 +214,7 @@ curl -sSL https://kuboard.cn/install-script/v1.20.x/install_kubelet.sh | sh -s 1
> * 第八行为阿里云 docker hub 镜像
``` sh
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.20.0 用于指定 kubenetes 版本,支持所有 1.20.x 版本的安装
# 最后一个参数 1.19.5 用于指定 kubenetes 版本,支持所有 1.19.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
@ -223,7 +223,7 @@ curl -sSL https://kuboard.cn/install-script/v1.20.x/install_kubelet.sh | sh -s 1
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
```
<<< @/.vuepress/public/install-script/v1.20.x/install_kubelet.sh {79}
<<< @/.vuepress/public/install-script/v1.19.x/install_kubelet.sh {79}
::: warning
如果此时执行 `systemctl status kubelet` 命令,将得到 kubelet 启动失败的错误提示,请忽略此错误,因为必须完成后续步骤中 kubeadm init 的操作kubelet 才能正常启动
@ -254,8 +254,8 @@ export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
<b-tab title="快速初始化" active>
**请将脚本最后的 1.20.0 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.20.x 不要替换</font>
**请将脚本最后的 1.19.5 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.19.x 不要替换</font>
``` sh {10}
# 只在 master 节点执行
@ -267,13 +267,13 @@ export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.20.x/init_master.sh | sh -s 1.20.0
curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.5
```
</b-tab>
<b-tab title="手动初始化">
手动执行以下代码,结果与快速初始化相同。<font color="red">***请将脚本第21行已高亮的 ${1} 替换成您需要的版本号,例如 1.20.0***</font>
手动执行以下代码,结果与快速初始化相同。<font color="red">***请将脚本第21行已高亮的 ${1} 替换成您需要的版本号,例如 1.19.5***</font>
``` sh
# 只在 master 节点执行
@ -287,7 +287,7 @@ export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
```
<<< @/.vuepress/public/install-script/v1.20.x/init_master.sh {21}
<<< @/.vuepress/public/install-script/v1.19.x/init_master.sh {21}
</b-tab>
</b-tabs>
@ -492,9 +492,9 @@ kubectl get nodes -o wide
```sh
[root@demo-master-a-1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
demo-master-a-1 Ready master 5m3s v1.20.x
demo-worker-a-1 Ready <none> 2m26s v1.20.x
demo-worker-a-2 Ready <none> 3m56s v1.20.x
demo-master-a-1 Ready master 5m3s v1.19.x
demo-worker-a-1 Ready <none> 2m26s v1.19.x
demo-worker-a-2 Ready <none> 3m56s v1.19.x
```
@ -512,7 +512,7 @@ demo-worker-a-2 Ready <none> 3m56s v1.20.x
``` sh
# 只在 master 节点执行
kubectl apply -f https://kuboard.cn/install-script/v1.20.x/nginx-ingress.yaml
kubectl apply -f https://kuboard.cn/install-script/v1.19.x/nginx-ingress.yaml
```
</b-tab>
@ -525,13 +525,13 @@ kubectl apply -f https://kuboard.cn/install-script/v1.20.x/nginx-ingress.yaml
``` sh
# 只在 master 节点执行
kubectl delete -f https://kuboard.cn/install-script/v1.20.x/nginx-ingress.yaml
kubectl delete -f https://kuboard.cn/install-script/v1.19.x/nginx-ingress.yaml
```
</b-tab>
<b-tab title="YAML文件">
<<< @/.vuepress/public/install-script/v1.20.x/nginx-ingress.yaml
<<< @/.vuepress/public/install-script/v1.19.x/nginx-ingress.yaml
</b-tab>

View File

@ -2,31 +2,25 @@
vssueId: 15
# layout: StepLayout
sharingTitle: K8S入门第一步---安装装不好还有人免费远程协助更有K8S免费教程提供你还在等什么
description: Kubernete安装文档_Kubernetes最新稳定版v1.19.x的快速安装文档_该文档由众多网友验证并在线提出修改意见_持续不断地更新和完善_并且通过QQ群提供免费在线答疑的服务
description: Kubernete安装文档_Kubernetes最新稳定版v1.20.x的快速安装文档_该文档由众多网友验证并在线提出修改意见_持续不断地更新和完善_并且通过QQ群提供免费在线答疑的服务
meta:
- name: keywords
content: Kubernetes安装,K8S安装,kubeadm,Kubernetes 安装,K8S 安装,k8s搭建
---
# 使用kubeadm安装kubernetes_v1.19.x
# 使用kubeadm安装kubernetes_v1.20.x
<AdSenseTitle/>
## 文档特点
<div style="min-height: 612px;">
<InstallBanner version="v1.19.x" updateCount="89"/>
<InstallBanner version="v1.20.x" updateCount="92"/>
</div>
参考此免费文档98%以上的概率,您能够顺利完成 K8S 安装极个别的问题可以到QQ群里免费答疑。
<Course courseId="477593" />
<!-- 此课程配有直播视频讲解,点击此处可 [报名12元直播课程](https://ke.qq.com/course/477593?flowToken=1016935)
* 讲解K8S集群规划
* 以更加直观易于理解的形式讲解此安装过程
* 介绍K8S学习路径
* 报名学员如碰到安装问题,可获得远程协助
第一次直播课已经于1月18日完成现在 [报名]((https://ke.qq.com/course/477593?flowToken=1016935)) 可以随时看回看如需要还可在2月8日免费再听一次直播。 -->
## 配置要求
@ -34,7 +28,7 @@ meta:
对于 Kubernetes 初学者在搭建K8S集群时推荐在阿里云或腾讯云采购如下配置您也可以使用自己的虚拟机、私有云等您最容易获得的 Linux 环境)
* 至少2台 **2核4G** 的服务器
* **Cent OS 7.6 / 7.7 / 7.8**
* **CentOS 7.8** 或 **CentOS Stream 8**
<!-- <grid :rwd="{compact: 'stack'}">
<grid-item size="2/3" :rwd="{tablet: '1/1', compact: '1/1'}" style="padding: 1rem 0 1rem 1rem;">
@ -50,12 +44,13 @@ meta:
**安装后的软件版本为**
* Kubernetes v1.19.x
* calico 3.13.1
* nginx-ingress 1.5.5
* Docker 19.03.11
* Kubernetes v1.20.x
* calico 3.17.1
* nginx-ingress 1.9.1
* Containerd.io 1.4.3
> 如果要安装 Kubernetes 历史版本,请参考:
> * [安装 Kubernetes v1.19.x 单Master节点](/install/history-k8s/install-k8s-1.19.x.html)
> * [安装 Kubernetes v1.18.x 单Master节点](/install/history-k8s/install-k8s-1.18.x.html)
> * [安装 Kubernetes v1.17.x 单Master节点](/install/history-k8s/install-k8s-1.17.x.html)
> * [安装 Kubernetes v1.16.3 单Master节点](/install/history-k8s/install-k8s-1.16.3.html)
@ -77,12 +72,21 @@ meta:
<img src="/images/topology/k8s.png" style="max-width: 100%;" alt="Kubernetes安装Kubernetes安装拓扑图">
</p>
::: tip 关于二进制安装
::: tip Container Runtime
kubeadm 是 Kubernetes 官方支持的安装方式,“二进制” 不是。本文档采用 kubernetes.io 官方推荐的 kubeadm 工具安装 kubernetes 集群。
* Kubernetes v1.20 开始,默认移除 docker 的依赖,如果宿主机上安装了 docker 和 containerd将优先使用 docker 作为容器运行引擎,如果宿主机上未安装 docker 只安装了 containerd将使用 containerd 作为容器运行引擎;
* 本文使用 containerd 作为容器运行引擎;
:::
::: tip 关于二进制安装
* kubeadm 是 Kubernetes 官方支持的安装方式,“二进制” 不是。本文档采用 kubernetes.io 官方推荐的 kubeadm 工具安装 kubernetes 集群。
:::
<!-- </div>
<div slot="step1"> -->
@ -111,13 +115,11 @@ lscpu
| CentOS 版本 | 本文档是否兼容 | 备注 |
| ----------- | --------------------------------------- | ----------------------------------- |
| 7.8 | <span style="font-size: 24px;">😄</span> | 已验证 |
| 7.7 | <span style="font-size: 24px;">😄</span> | 已验证 |
| 7.6 | <span style="font-size: 24px;">😄</span> | 验证 |
| 7.5 | <span style="font-size: 24px;">😞</span> | 已证实会出现 kubelet 无法启动的问题 |
| 7.4 | <span style="font-size: 24px;">😞</span> | 已证实会出现 kubelet 无法启动的问题 |
| 7.3 | <span style="font-size: 24px;">😞</span> | 已证实会出现 kubelet 无法启动的问题 |
| 7.2 | <span style="font-size: 24px;">😞</span> | 已证实会出现 kubelet 无法启动的问题 |
| CentOS Stream 8 | <span style="font-size: 24px;">😄</span> | 已验证 |
| CentOS 7.8 | <span style="font-size: 24px;">😄</span> | 已验证 |
| CentOS 7.7 | <span style="font-size: 24px;">😞</span> | 验证 |
| CentOS 7.6 | <span style="font-size: 24px;">😞</span> | 未验证 |
</div>
</grid-item>
@ -164,14 +166,14 @@ default via 172.21.0.1 dev eth0
:::
## 安装docker及kubelet
## 安装containerd/kubelet/kubeadm/kubectl
<!-- <SharingBlock> -->
<InstallEnvCheck type="k8s">
<InstallEnvCheck20 type="k8s">
使用 root 身份在所有节点执行如下代码,以安装软件:
- docker
- containerd
- nfs-utils
- kubectl / kubeadm / kubelet
@ -181,8 +183,8 @@ default via 172.21.0.1 dev eth0
<b-tabs content-class="mt-3">
<b-tab title="快速安装" active>
**请将脚本最后的 1.19.5 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.19.x 不要替换</font>
**请将脚本最后的 1.20.1 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.20.x 不要替换</font>
> docker hub 镜像请根据自己网络的情况任选一个
> * 第四行为腾讯云 docker hub 镜像
@ -191,7 +193,7 @@ default via 172.21.0.1 dev eth0
> * 第十行为阿里云 docker hub 镜像
``` sh
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.19.5 用于指定 kubenetes 版本,支持所有 1.19.x 版本的安装
# 最后一个参数 1.20.1 用于指定 kubenetes 版本,支持所有 1.20.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
@ -200,13 +202,13 @@ default via 172.21.0.1 dev eth0
# export REGISTRY_MIRROR="https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"
# 阿里云 docker hub 镜像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.5
curl -sSL https://kuboard.cn/install-script/v1.20.x/install_kubelet.sh | sh -s 1.20.1
```
</b-tab>
<b-tab title="手动安装">
手动执行以下代码,结果与快速安装相同。<font color="red">***请将脚本第79行已高亮的 ${1} 替换成您需要的版本号,例如 1.19.5***</font>
手动执行以下代码,结果与快速安装相同。<font color="red">***请将脚本第79行已高亮的 ${1} 替换成您需要的版本号,例如 1.20.1***</font>
> docker hub 镜像请根据自己网络的情况任选一个
> * 第四行为腾讯云 docker hub 镜像
@ -214,7 +216,7 @@ curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1
> * 第八行为阿里云 docker hub 镜像
``` sh
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.19.5 用于指定 kubenetes 版本,支持所有 1.19.x 版本的安装
# 最后一个参数 1.20.1 用于指定 kubenetes 版本,支持所有 1.20.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
@ -223,7 +225,7 @@ curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
```
<<< @/.vuepress/public/install-script/v1.19.x/install_kubelet.sh {79}
<<< @/.vuepress/public/install-script/v1.20.x/install_kubelet.sh {79}
::: warning
如果此时执行 `systemctl status kubelet` 命令,将得到 kubelet 启动失败的错误提示,请忽略此错误,因为必须完成后续步骤中 kubeadm init 的操作kubelet 才能正常启动
@ -233,7 +235,7 @@ export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
</b-tabs>
</b-card>
</InstallEnvCheck>
</InstallEnvCheck20>
<!-- </SharingBlock> -->
@ -254,8 +256,8 @@ export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
<b-tab title="快速初始化" active>
**请将脚本最后的 1.19.5 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.19.x 不要替换</font>
**请将脚本最后的 1.20.1 替换成您需要的版本号,**
<font color="red">脚本中间的 v1.20.x 不要替换</font>
``` sh {10}
# 只在 master 节点执行
@ -267,13 +269,13 @@ export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.5
curl -sSL https://kuboard.cn/install-script/v1.20.x/init_master.sh | sh -s 1.20.1
```
</b-tab>
<b-tab title="手动初始化">
手动执行以下代码,结果与快速初始化相同。<font color="red">***请将脚本第21行已高亮的 ${1} 替换成您需要的版本号,例如 1.19.5***</font>
手动执行以下代码,结果与快速初始化相同。<font color="red">***请将脚本第21行已高亮的 ${1} 替换成您需要的版本号,例如 1.20.1***</font>
``` sh
# 只在 master 节点执行
@ -287,7 +289,7 @@ export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
```
<<< @/.vuepress/public/install-script/v1.19.x/init_master.sh {21}
<<< @/.vuepress/public/install-script/v1.20.x/init_master.sh {21}
</b-tab>
</b-tabs>
@ -300,14 +302,8 @@ echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
<b-collapse id="collapse-init-error" class="mt-2">
<b-card style="background-color: rgb(254, 240, 240); border: solid 1px #F56C6C;">
* 请确保您的环境符合 [安装docker及kubelet](#安装docker及kubelet) 中所有勾选框的要求
* 请确保您的环境符合 [安装containerd/kubelet/kubeadm/kubectl](#安装containerd-kubelet-kubeadm-kubectl) 中所有勾选框的要求
* 请确保您使用 root 用户执行初始化命令
* 不能下载 kubernetes 的 docker 镜像
* 安装文档中,默认使用阿里云的 docker 镜像仓库,然而,有时候,该镜像会罢工
* 如碰到不能下载 docker 镜像的情况请尝试手工初始化并修改手工初始化脚本里的第22行文档中已高亮
```yaml
imageRepository: gcr.azk8s.cn/google-containers
```
* 检查环境变量,执行如下命令
``` sh
echo MASTER_IP=${MASTER_IP} && echo APISERVER_NAME=${APISERVER_NAME} && echo POD_SUBNET=${POD_SUBNET}
@ -339,14 +335,14 @@ kubectl get nodes -o wide
<b-card style="background-color: rgb(254, 240, 240); border: solid 1px #F56C6C;">
* ImagePullBackoff / Pending
* 如果 `kubectl get pod -n kube-system -o wide` 的输出结果中出现 ImagePullBackoff 或者长时间处于 Pending 的情况,请参考 [查看镜像抓取进度](/learning/faq/image-pull-backoff.html)
* 如果 `kubectl get pod -n kube-system -o wide` 的输出结果中出现 ImagePullBackoff 或者长时间处于 Pending 的情况
* ContainerCreating
* 如果 `kubectl get pod -n kube-system -o wide` 的输出结果中某个 Pod 长期处于 ContainerCreating、PodInitializing 或 Init:0/3 的状态,可以尝试:
* 查看该 Pod 的状态,例如:
``` sh
kubectl describe pod kube-flannel-ds-amd64-8l25c -n kube-system
```
如果输出结果中,最后一行显示的是 Pulling image请耐心等待,或者参考 [查看镜像抓取进度](/learning/faq/image-pull-backoff.html)
如果输出结果中,最后一行显示的是 Pulling image请耐心等待
```
Normal Pulling 44s kubelet, k8s-worker-02 Pulling image "quay.io/coreos/flannel:v0.12.0-amd64"
```
@ -492,9 +488,9 @@ kubectl get nodes -o wide
```sh
[root@demo-master-a-1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
demo-master-a-1 Ready master 5m3s v1.19.x
demo-worker-a-1 Ready <none> 2m26s v1.19.x
demo-worker-a-2 Ready <none> 3m56s v1.19.x
demo-master-a-1 Ready master 5m3s v1.20.x
demo-worker-a-1 Ready <none> 2m26s v1.20.x
demo-worker-a-2 Ready <none> 3m56s v1.20.x
```
@ -512,7 +508,7 @@ demo-worker-a-2 Ready <none> 3m56s v1.19.x
``` sh
# 只在 master 节点执行
kubectl apply -f https://kuboard.cn/install-script/v1.19.x/nginx-ingress.yaml
kubectl apply -f https://kuboard.cn/install-script/v1.20.x/nginx-ingress.yaml
```
</b-tab>
@ -525,13 +521,13 @@ kubectl apply -f https://kuboard.cn/install-script/v1.19.x/nginx-ingress.yaml
``` sh
# 只在 master 节点执行
kubectl delete -f https://kuboard.cn/install-script/v1.19.x/nginx-ingress.yaml
kubectl delete -f https://kuboard.cn/install-script/v1.20.x/nginx-ingress.yaml
```
</b-tab>
<b-tab title="YAML文件">
<<< @/.vuepress/public/install-script/v1.19.x/nginx-ingress.yaml
<<< @/.vuepress/public/install-script/v1.20.x/nginx-ingress.yaml
</b-tab>
@ -577,9 +573,7 @@ kubectl delete -f https://kuboard.cn/install-script/v1.19.x/nginx-ingress.yaml
<!-- <span v-on:click="$sendGaEvent('安装后求GitHub Star','安装后求GitHub Star','安装后求GitHub Star')"><a href="https://github.com/eip-work/kuboard-press" target="_blank">点击此处给个GitHub Star</a></span>
支持一下吧,<StarCount></StarCount>这么多人都 star 了呢,怎么能少得了您呢? -->
[安装 Kuboard - 微服务管理界面](/install/install-dashboard.html)
[使用 GitHub/GitLab 账号登录 Kubernetes](/learning/k8s-advanced/sec/authenticate/install.html)
[安装 Kuboard - 微服务管理界面](/install/v3/install-built-in.html)
[获取 Kubernetes 免费教程](/learning/)