kubernetes安装部署
环境规划
集群类型
kubernetes集群类型主要分为一主多从,以及多主多从两种类型
- 一主多从:一个master对应多个node节点,部署简单但是容易出现单机故障,主要用于测试环境
- 多主多从:多台master多个node节点,部署繁琐,安全性高,主要用于生产环境
K8S安装方式
kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包。
- kubeadm:快速搭建kubernetes集群工具
- minikube:快速搭建单节点kubernetes工具
- 二进制包:从官网上下载每个组件二进制包,安装麻烦,但是对理解kubernetes更加有效
环境规划
主机名称 | 角色 | IP | 操作系统 | 硬件资源 |
---|---|---|---|---|
master | master | 10.1.1.2 | CenTOS7.6+ | 2G |
node1 | node1 | 10.1.1.3 | CenTOS7.6+ | 2G |
node2 | node2 | 10.1.1.4 | CenTOS7.6+ | 2G |
PS:虚拟机内存最好2G起步,亲测1G环境K8S无法完成初始化,2G即可
环境搭建
版本选择
Docker | kuberadm | kubectl | kubelet |
---|---|---|---|
18.06.3 | 1.18.0 | 1.18.0 | 1.18.0 |
环境初始化
关闭安全策略
# 默认三台服务器都关闭此处只演示master
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 关闭selinux需要重启
sed -i 's/enforcing/disabled/' /etc/selinux/config
DNS解析
# 默认三台服务器都关闭此处只演示master
cat >> /etc/hosts << EOF
10.1.1.2 master
10.1.1.3 node1
10.1.1.4 node2
EOF
时间同步
# K8S要求节点之间时间必须一致 因此配置时间同步
# 默认三台服务器都关闭此处只演示master
# 安装ntpdate
yum install ntpdate -y
# 开启ntpdate
systemctl start ntpdate.service && systemctl enable ntpdate.service
# 时间同步阿里云
ntpdate ntp1.aliyun.com
# 系统时间同步硬件 防止系统重启时间被还原
hwclock --systohc
# 查看当前时间
date
关闭Swap分区
# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
添加网桥过滤与地址转发功能
# 在每个节点上将桥接的IPv4流量传递到iptables的链
# 默认三台服务器都需要此处只演示master
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 加载配置
sysctl -p
# 加载br_netfilter模块
modprobe br_netfilter
# 添加开机自启动
echo modprobe br_netfilter >> /etc/rc.d/rc.local && chmod +x /etc/rc.d/rc.local
# 查看是否加载
lsmod | grep br_netfilter
开启ipvs
在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块
# 默认三台服务器都需要此处只演示master
yum -y install ipset ipvsadm
# 配置ipvs模块
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/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 && /bin/bash /etc/sysconfig/modules/ipvs.modules
# 查看是否加载
lsmod | grep -e ipvs -e nf_conntrack_ipv4
重启
# 重启
reboot
安装Docker
# 默认三台服务器都需要此处只演示master
# 安装docker网络源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 安装docker
yum -y install docker-ce-18.06.3.ce-3.el7
# 启动docker
systemctl enable docker && systemctl start docker
# 配置docker仓库源
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"live-restore": true,
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
EOF
# 加载配置
systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
# 查看docker信息
docker info
安装kubeadm/kubelet/kubectl
# 默认三台服务器都需要此处只演示master
# 由于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
EOF
# 指定版本号部署
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致 修改"/etc/sysconfig/kubelet"文件的内容:
cat > /etc/sysconfig/kubelet << EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
# 配置开机启动 由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet
安装K8S
查看并且拉取镜像
# 查看所需要镜像
kubeadm config images list
# 由于K8S下载初始化镜像很慢 提前下载镜像 三台机器都需要做
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 iname in ${IMAGES[@]};do
docker pull registry.aliyuncs.com/google_containers/$iname
docker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$iname
docker rmi registry.aliyuncs.com/google_containers/$iname
done
部署master节点
# 部署K8S的master节点
# 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址
kubeadm init
--apiserver-advertise-address=10.1.1.2
--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
# 根据上述指示创建文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
部署node节点
# node加入master节点
kubeadm join 10.1.1.2:6443 --token 5fbide.ray0096zdgq5gq0i
--discovery-token-ca-cert-hash sha256:b4261ad42ed9a9f164c26eaaf0e5948c0b1b3fc5cd679e448553427331d43a8d
# master节点查看node
[root@master ~]# kubectl get nodes
部署网络
kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,本次选择flannel
# 只需要在master节点执行即可
# 下载配置文件 如果下载失败可以手动下载
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改网络镜像源
#这个镜像源不稳定 如果网络比较好的话建议不更换就默认国外地址即可
[root@master ~]# sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml
# 安装网络插件
[root@master ~]# kubectl apply -f kube-flannel.yml
# 查看节点信息与健康状态
[root@master ~]# kubectl get nodes,cs
# 查看集群信息
[root@master ~]# kubectl cluster-info
安装Nginx
# master节点安装nginx测试K8S集群是否对外提供服务
# 添加nginx
kubectl create deployment nginx --image=nginx:1.14-alpine
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务状态
kubectl get pods,svc
# 访问测试关联上述暴露端口
[root@master ~]# curl 127.0.0.1:30378
配置kubectl命令自动补全
# 安装自动补全
yum install -y bash-completion
# 添加环境变量
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 加载配置
source ~/.bashrc