整体流程
- 每个节点上安装 docker
- 每个节点上安装 kubeadm kubectl kubelet
- 在控制节点上使用 kubeadm 初始化创建 Cluster
- 配置 kubectl (kube-apiserver 连接信息及 credentials)
- 安装 pod 网络插件 (CNI)
安装 docker
关于当前k8s 版本与 docker 版本匹配问题可查询文档:
https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#dockercentos 7.9.2009
### 安装所需包sudo yum install -y yum-utils device-mapper-persistent-data lvm2### 新增官方 Docker 仓库# sudo yum-config-manager --add-repo \# https://download.docker.com/linux/centos/docker-ce.repo# 阿里镜像站cat > /etc/yum.repos.d/docker-ce-aliyun.repo << 'EOF'[docker-ce-stable]name=Docker CE Stable - $basearchbaseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stableenabled=1gpgcheck=1gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpgEOF# k8s-1.19 最后一个支持 docker-shim 的版本sudo yum update -y && sudo yum install -y \containerd.io-1.2.13 \docker-ce-19.03.11 \docker-ce-cli-19.03.11## 创建 /etc/docker 目录sudo mkdir /etc/docker# 设置 Docker daemoncat <<EOF | sudo tee /etc/docker/daemon.json{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"]}EOF# Create /etc/systemd/system/docker.service.dsudo mkdir -p /etc/systemd/system/docker.service.dsudo systemctl daemon-reloadsudo systemctl restart dockersudo systemctl enable docker
安装 kubeadm kubectl kubelet
Ubuntu Debian
官方脚本
使用阿里云镜像站sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectlsudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes-aliyun.list deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectlcentos 7.9.2009
一些 RHEL/CentOS 7 的用户曾经遇到过问题:由于 iptables 被绕过而导致流量无法正确路由的问题。您应该确保 在 sysctl 配置中的 net.bridge.bridge-nf-call-iptables 被设置为 1。# google 官方仓库 # cat <<EOF > /etc/yum.repos.d/kubernetes.repo # [kubernetes] # name=Kubernetes # baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-# el7-x86_64 # enabled=1 # gpgcheck=1 # repo_gpgcheck=1 # gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg # https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg # EOF # 使用阿里云镜像站 cat <<EOF > /etc/yum.repos.d/kubernetes-aliyun.repo [kubernetes-aliyun] 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 # 将 SELinux 设置为 permissive 模式(相当于将其禁用) setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable --now kubelet
为使用 IPVS 模式做准备cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --systemyum -y install ipvsadm modprobe br_netfiltere4r cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_lc modprobe ip_vs_dh modprobe ip_vs_sh modprobe ip_vs_sed modprobe ip_vs_nq modprobe ip_vs_wrr modprobe nf_conntrack EOF chmod 755 /etc/sysconfig/modules/ipvs.modules \ && bash /etc/sysconfig/modules/ipvs.modules && lsmod \ | grep -e ip_vs -e nf_conntrack_ipv4配置 Docker cgroup driver
The recommended driver is “systemd”, Sometime the driver is “cgroup”
https://kubernetes.io/docs/setup/production-environment/container-runtimes/使用 kubeadm
指定内网地址:--apiserver-advertise-address=
指定镜像仓库:--image-repository=registry.aliyuncs.com/google_containers
指定kubernetes版本:--kubernetes-version=v1.11.6--kubernetes-version=v1.12.4--kubernetes-version=v1.13.4准备使用 Flannel
kubeadm init --pod-network-cidr=10.244.0.0/16准备使用 Calico
kubeadm init --pod-network-cidr=192.168.0.0/16问题
# 如果报错: # [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist modprobe br_netfilter # [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 echo 1 > /proc/sys/net/ipv4/ip_forward配置kubectl
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config安装网络插件
使用 Flannel
经典方案,自动化适配部署稳定,网络性能普通kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml使用 Calico
高性能方案,部署需要结合网络环境修改配置,支持K8S网络策略对象
官方参考: https://docs.projectcalico.org/v3.4/getting-started/kubernetes/
ipip和cross-subnet: https://blog.csdn.net/mailjoin/article/details/79695463
使用定制过的# 安装calico专用etcd kubectl apply -f \ https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/hosted/etcd.yaml # 安装calico kubectl apply -f \ https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/hosted/calico.yaml # 下载 manifast ,准备修改,禁用 IPIP curl https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/hosted/calico.yaml -O wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yamlkubectl apply -f \ https://raw.githubusercontent.com/xiangxiaoc/k8s-manifest/master/calico/etcd.yaml kubectl apply -f \ https://raw.githubusercontent.com/xiangxiaoc/k8s-manifest/master/calico/calico.yaml使用 Canal
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml
取消 master 节点污点
开发环境取消 Master 污点,让普通 pod 可以被调度到这台 master 节点上
kubectl taint nodes --all node-role.kubernetes.io/master-
重置集群
删除所有管理节点的 pod
kubeadm reset
获取kubeadm init 时候的配置
kubectl -n kube-system get cm kubeadm-config -o yaml
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
