1.集群环境的搭建

1.集群类型
一主多从:一台master节点和多台node节点,搭建简单,但是有单机故障风险,适合用于测试环境
多主多从:多台master节点和多台node节点,搭建麻烦,安全性高,适合用于生产环境
2.安装方式
minikube:一个用于快速搭建单节点kubernetes的工具
kubeadm:一个用于快速搭建kubernetes集群的工具
二进制包:从官网下载每个组件的二进制包,依次去安装,此方式对于理解kubernetes更加有效
3.主机规划
master 192.168.159.132
node 192.168.159.131/192.168.159.130
环境搭建
搭建一主二从,分别是centos7系统,docker,kubeadm,kubelet,kubectl
检查操作系统版本(需要是centos7.5版本之上)
cat /etc/redhat-release
主机名解析
vim /etc/hosts
192.168.159.130 node1
192.168.159.131 node2
192.168.159.132 master
时间同步
启动chronyd服务
systemctl start chronyd
开机自启
systemctl enable chronyd
查看时间
date
禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
禁用selinux
查看 getenforce
vim /etc/selinux/config
SELINUX=disabled
禁用swap分区
vim /etc/fstab 注释swap哪一行
修改linux的内核参数
vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
重新加载配置文件
sysctl -p
加载网桥过滤模块
modprobe br_netfilter
查看网桥是否加载成功
lsmod|grep br_netfilter
配置ipvs功能
安装ipset和ipvsadmin
yum install ipset ipvsadmin -y
添加需要加载的模块,写入脚本(文件名随意,但是文件结尾必须是modules)
cat < /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
执行脚本
sh /etc/sysconfig/modules/ipvs.modules
查看对应的模块是否执行成功
lsmod |grep -e ip_vs -e nf_conntrack_ipv4
安装完成后重启系统
reboot
安装docker
切换镜像源(-o 将日志写入文件,-O 将内容写入文件)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
查看当前镜像源中支持的docker版本
yum list docker-ce --showduplicates
安装特定版本的docker,指定 --setopt=obsoletes=0,yum才安装指定版本docker,否则可能会安装最新的docker
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
添加一个配置文件
mkdir /etc/docker
cat < /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
启动docker
systemctl start docker
systemctl enable docker
查看docker状态
docker --version
安装kubernetes组件
由于kubernetes镜像源在国外
编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
# 编辑/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
安装kubeadm,kubelet,kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
配置kubelet的cgroup,编辑/etc/sysconfig/kubelet,添加如下配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
設置kubelet开机自启
systemctl enable kubelet
准备镜像
kubeadm config images list
提供替代方案
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
集群初始化!(只在master节点执行)
kubeadm init \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.159.132
创建必要的文件目录
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点执行的内容
kubeadm join 192.168.159.132:6443 --token dn8usb.gusia3ucz8bhd0ld \
--discovery-token-ca-cert-hash sha256:054b34e0299b1e2e08ac6883c1160a177cdb5cb53f9b9252af4a8b2d223c48f6
安装网络插件
只需要在master节点执行,本次选择flannel,插件使用的是DaemonSet的控制器,它会在每个节点上都运行
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果上面的链接下载失败
vim /etc/hosts 下新增,重启后就好使了..使用systemctl restart network没用..离谱
199.232.68.133 raw.githubusercontent.com
修改文件中quay.io仓库为quay-mirror.qiniu.com
使用配置文件启动flannel
kubectl apply -f kube-flannel.yml
然后通过kubectl get nodes 查看是否都是ready状态
致此,安装完成
通过服务部署验证集群的可用性
部署nginx(master节点操作即可)
kubectl create deployment nginx --image=nginx:1.14-alpine
暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
查看服务状态
kubectl get pods,service