前言:
参考k8s教程由浅入深
一.搭建k8s平台规划
- 平台类型: 单master集群 多master集群
- 单master集群:依赖于master结点,master结点挂了,集群不可用
- 多master集群:高可用,master结点多了一个负载均衡器
二、搭建方式
1)kubeadm
流程:
- kubeadm init
- kubeadm join
优点:方便、快速
2)二进制包
流程:从github上下载二进制包,手动部署每个组件
优点:方便了解k8s工作原理,利于后期维护
三、使用kubeadm安装k8s
1)系统初始化
关闭防火墙、selinux、swap原因 https://www.zhihu.com/question/374752553
a.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
b.关闭selinux
selinux的是linux系统中的一个内核模块,安全子系统。作用:减少服务进程中可访问的资源
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
c.关闭swap
swapoff -a # 临时
vim /etc/fstab # 永久
d.设置主机名
在master/host主机中设置hostname
hostnamectl set-hostname <hostname>
e.在master结点中设置hosts
cat >> /etc/hosts << EOF
<master ip> k8s-master
<node1 ip> k8s-node1
<node2 ip> k8s-node2
EOF
f.将桥接的ipv4流量传递到iptables的链
iptables具有封包过滤、封包重定向和网络地址转换等功能
iptables详解见 https://www.cnblogs.com/metoy/p/4320813.html
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
g.同步时间
yum install ntpdate -y
ntpdate time.windows.com
2)安装docker/kubeadm/kubelet
a.docker安装
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
b.添加镜像源
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
c.设置k8s yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
d.安装kubeadm/kubelet/kubectl
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet
3)部署Kubernetes
a.在master结点上运行
kubeadm init --apiserver-advertise-address=0.0.0.0 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
此步骤中执行的事情:
- Preflight Checks:检查内核、Cgroups 模块是否可用、hostname格式、端口是否被占用等等
- 生成 Kubernetes 对外提供服务所需的各种证书和对应的目录 (证书文件在/etc/kubernetes/pki目录下,最主要的证书文件是 ca.crt 和对应的私钥 ca.key)
- 为其他组件生成访问 kube-apiserver 所需的配置文件(/etc/kubernetes/xxx.conf)
- kubeadm 会为 Master 组件生成 Pod 配置文件,kube-apiserver、kube-controller-manager、kube-scheduler以pod的形式被部署起来
- Static Pod:将需要部署的pod的yaml
init成功后,运行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
b.在node结点运行
kubeadm join <ip:port> --token <token> --discovery-token-ca-cert-hash <hash>
若在云服务器上运行,node结点join时可能需要访问master结点的内网ip,此时可用iptable net表转发发送至master结点内网的ip地址至公网ip地址
iptables -t nat -A OUTPUT -d <master结点内网ip> -j DNAT --to-destination <master结点公网ip>
4)部署CNI网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f calico.yaml
此时,可以看到k8s集群状态有notready转变为ready