目录
1 环境规划
1.1 集群类型
1.2 安装方式
1.3 主机规划
2 环境搭建
2.1 前言
2.2 环境初始化
2.2.1 检查操作系统的版本
2.2.2 关闭防火墙和禁止防火墙开机启动
2.2.3 设置主机名
2.2.4 主机名解析
2.2.5 时间同步
2.2.6 关闭selinux
2.2.7 关闭swap分区
2.2.8 将桥接的IPv4流量传递到iptables的链
2.2.9 开启ipvs
2.2.10 重启三台机器
2.3 每个节点安装Docker、kubeadm、kubelet和kubectl
2.3.1 安装Docker
2.3.2 添加阿里云的YUM软件源
2.3.3 安装kubeadm、kubelet和kubectl
2.4 查看k8s所需镜像
2.5 部署k8s的Master节点
2.6 部署k8s的Node节点
2.7 部署CNI网络插件
3 服务部署
3.1 前言
3.2 步骤
4 kubernetes中kubectl命令自动补全
为了测试方便,本次搭建的是一主多从类型的集群。
角色 |
IP地址 |
操作系统 |
配置 |
Master |
192.168.18.100 |
CentOS7.8+,基础设施服务器 |
2核CPU,2G内存,50G硬盘 |
Node1 |
192.168.18.101 |
CentOS7.8+,基础设施服务器 |
2核CPU,2G内存,50G硬盘 |
Node2 |
192.168.18.102 |
CentOS7.8+,基础设施服务器 |
2核CPU,2G内存,50G硬盘 |
没有特殊说明,就是三台机器都需要执行。
cat /etc/redhat-release
systemctl stop firewalld
systemctl disable firewalld
hostnamectl set-hostname
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
cat >> /etc/hosts << EOF 192.168.18.100 k8s-master 192.168.18.101 k8s-node1 192.168.18.102 k8s-node2 EOF
yum install ntpdate -y
ntpdate time.windows.com
getenforce
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF
# 加载br_netfilter模块 modprobe br_netfilter
# 查看是否加载 lsmod | grep br_netfilter
# 生效 sysctl --system
yum -y install ipset ipvsadm
cat > /etc/sysconfig/modules/ipvs.modules <
- 授权、运行、检查是否加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
- 检查是否加载:
lsmod | grep -e ipvs -e nf_conntrack_ipv42.2.10 重启三台机器
- 重启三台Linux机器:
reboot2.3 每个节点安装Docker、kubeadm、kubelet和kubectl
2.3.1 安装Docker
- 安装Docker:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum -y install docker-ce-18.06.3.ce-3.el7systemctl enable docker && systemctl start dockerdocker version
- 设置Docker镜像加速器:
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com"], "live-restore": true, "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"3"}, "storage-driver": "overlay2" } EOFsudo systemctl daemon-reloadsudo systemctl restart docker2.3.2 添加阿里云的YUM软件源
- 由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源:
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 EOF2.3.3 安装kubeadm、kubelet和kubectl
- 由于版本更新频繁,这里指定版本号部署:
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
- 为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容:
vim /etc/sysconfig/kubelet# 修改 KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs"
- 设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动:
systemctl enable kubelet2.4 查看k8s所需镜像
- 查看k8s所需镜像:
kubeadm config images list2.5 部署k8s的Master节点
- 部署k8s的Master节点(192.168.18.100):
# 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址 kubeadm init \ --apiserver-advertise-address=192.168.18.100 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
- 根据提示消息,在Master节点上使用kubectl工具:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config2.6 部署k8s的Node节点
- 根据提示,在192.168.18.101和192.168.18.102上添加如下的命令:
kubeadm join 192.168.18.100:6443 --token jv039y.bh8yetcpo6zeqfyj \ --discovery-token-ca-cert-hash sha256:3c81e535fd4f8ff1752617d7a2d56c3b23779cf9545e530828c0ff6b507e0e26
- 默认的token有效期为2小时,当过期之后,该token就不能用了,这时可以使用如下的命令创建token:
kubeadm token create --print-join-command# 生成一个永不过期的token kubeadm token create --ttl 0 --print-join-command2.7 部署CNI网络插件
- 根据提示,在Master节点上使用kubectl工具查看节点状态:
kubectl get nodes
- kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,本次选择flannel,如果网络不行,可以使用本人提供的kube-flannel.yml,当然,你也可以安装calico,请点这里calico.yaml,推荐安装calico。
- 在Master节点上获取flannel配置文件(可能会失败,如果失败,请下载到本地,然后安装):
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 使用配置文件启动flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 查看部署CNI网络插件进度:
kubectl get pods -n kube-system
- 再次在Master节点使用kubectl工具查看节点状态:
kubectl get nodes
- 查看集群健康状况:
kubectl get cskubectl cluster-info3 服务部署
3.1 前言
- 在Kubernetes集群中部署一个Nginx程序,测试下集群是否正常工作。
3.2 步骤
- 部署Nginx:
kubectl create deployment nginx --image=nginx:1.14-alpine
- 暴露端口:
kubectl expose deployment nginx --port=80 --type=NodePort
- 查看服务状态:
kubectl get pods,svc4 kubernetes中kubectl命令自动补全
yum install -y bash-completionsource /usr/share/bash-completion/bash_completionsource <(kubectl completion bash)echo “source <(kubectl completion bash)” >> ~/.bashrcvim /root/.bashrcsource /usr/share/bash-completion/bash_completionsource <(kubectl completion bash)