kubernetes部署安装

kubernetes安装部署

环境规划

集群类型

kubernetes集群类型主要分为一主多从,以及多主多从两种类型

  • 一主多从:一个master对应多个node节点,部署简单但是容易出现单机故障,主要用于测试环境
  • 多主多从:多台master多个node节点,部署繁琐,安全性高,主要用于生产环境

image-20210925234707008

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

image-20210926002553123

开启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

image-20210926003405514

重启

# 重启
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

image-20210926085805565

部署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

image-20210926130308481

# 根据上述指示创建文件
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

image-20210926130825653

部署网络

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

image-20210926170027393

# 查看集群信息
[root@master ~]# kubectl cluster-info

image-20210926170408198

安装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

image-20210926171246136

# 访问测试关联上述暴露端口
[root@master ~]# curl 127.0.0.1:30378

image-20210926171427439

配置kubectl命令自动补全

# 安装自动补全
yum install -y bash-completion

# 添加环境变量
echo "source <(kubectl completion bash)" >> ~/.bashrc

# 加载配置
source ~/.bashrc
原文地址:https://www.cnblogs.com/SR-Program/p/15339129.html