1.查看系统版本要求
- Ubuntu 16.04+
- Debian 9+
- CentOS 7
- Red Hat Enterprise Linux (RHEL) 7
- Fedora 25+
- HypriotOS v1.0.1+
- Container Linux (测试 1800.6.0 版本)
要求:cpu>2核,内存>2G
生产上禁用交换分区(测试环境内存不够,可以选择不关闭交换分区)
如果iptables使用了nftables,应切回旧版
2.检查端口
控制平面
协议 | 方向 | 端口范围 | 作用 | 使用者 |
TCP | 入站 | 6443* | Kubernetes API 服务器 | 所有组件 |
TCP | 入站 | 2379-2380 | etcd server client API | kube-apiserver, etcd |
TCP | 入站 | 10250 | Kubelet API | kubelet 自身、控制平面组件 |
TCP | 入站 | 10251 | kube-scheduler | kube-scheduler 自身 |
TCP | 入站 | 10252 | kube-controller-manager | kube-controller-manager 自身 |
工作节点
协议 | 方向 | 端口范围 | 作用 | 使用者 |
TCP | 入站 | 10250 | Kubelet API | kubelet 自身、控制平面组件 |
TCP | 入站 | 30000-32767 (可修改) | NodePort 服务** | 所有组件 |
端口过多(可选择直接关闭防火墙)
3.pod 网络插件
开启特定端口
常用CNI(container network 插件)
- flannel ---不支持网络策略
- calico ---支持地址分配和网络策略
- canel --- flannel+calico
- kube-router...
(选择上述的一个即可)
4.重置iptables规则
iptables -P INPUT ACCEPT
iptables -F
iptables -L 查看
5.安装runtime(容器)
检查域套接字
检查路径
运行时 | 域套接字 |
Docker | /var/run/docker.sock |
containerd | /run/containerd/containerd.sock |
CRI-O | /var/run/crio/crio.sock |
如同时检查到docker和containerd,则优先使用docker
docker 18.09 附带了 containerd 并且两者都是可以检测到的
6.安装docker(如安装请忽略)
a.配置docker的yum仓库(这里使用阿里云仓库)
yum -y install yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
b.安装docker
yum -y install docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
c.修改docker cgroup driver为systemd(驱动程序)
vim /etc/docker/daemon.json #如果不存在则创建 {
"exec-opts":["native.cgroupdriver=systemd"]
}
d.启动docker
systemctl daemon-reload
systemctl restart docker #启动docker systemctl enable docker (开机启动)
e.docker info |grep Cgroup
Cgroup Driver: systemd
7.设置主机名
hostnamectl set-hostname kube-master
vim /etc/hosts
192.168.9.104 k8s-master1
192.168.9.105 k8s-node1
192.168.9.100 k8s-node2
8.配置免密
ssh-keygen -t rsa (生成公钥)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.9.104 (拷贝公钥)
9.同步时间
ntpdate 0.rhel.pool.ntp.org
10.将 SELinux 设置为 permissive 模式(禁用)
SELinux作用:限制进程访问资源
getenforce:获取当前状态
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
目的:允许容器访问主机文件系统所必须的
11.设置内核参数net.bridge.bridge-nf-call-iptables
将桥接的IPv4流量传递到iptables的链
net.bridge.bridge-nf-call-iptables=0(iptables不对bridge的数据进行处理)
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system
lsmod | grep br_netfilter
12.配置kubenetes的yum仓库(阿里yum源)
vim /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
yum makecache (yum源生效)
13.安装kubelat、kubectl、kubeadm
yum -y install kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 (kubectl可选)
rpm -aq kubelet kubectl kubeadm (查看安装软件)
systemctl enable kubelet (kubelet开机启动)
14:初始化master1
kubeadm init --kubernetes-version=v1.18.0 --control-plane-endpoint "192.168.9.104:6443" --upload-certs --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
输出信息:
kubeadm join 192.168.9.104:6443 --token zihse9.ctxfyuujhf1vbcp3 \
--discovery-token-ca-cert-hash sha256:1c997860554870c7d91ec2defcddfd634d41d35b9035544528da4b955f5d6ddd
(保存下来)
15.加入node节点
在node节点上运行
kubeadm join 192.168.9.104:6443 --token zihse9.ctxfyuujhf1vbcp3 \
--discovery-token-ca-cert-hash sha256:1c997860554870c7d91ec2defcddfd634d41d35b9035544528da4b955f5d6ddd
--ignore-preflight-errors=Swap
16.使用kubectl工具
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
17.部署pod网络插件
此时master处于notredy,需要部署网络插件
此处使用cni的flannel
方法一 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl get pods -n kube-system |grep flannel #验证flannel网络插件是否部署成功(Running即为成功)
方法二
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml sed -i 's#quay.io#quay-mirror.qiniu.com#g' kube-flannel.yml #替换仓库地址 kubectl apply -f kube-flannel.yml
20.查看集群客户端和服务端程序版本信息
kubectl version --short=true
21.查看集群信息
kubectl cluster-info