一.Kubernetes部署环境准备
master和node节点都需要执行
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
setenforce 0 #临时
关闭swap(k8s禁止虚拟内存以提高性能)
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时
添加hosts
cat >> /etc/hosts << EOF
192.168.1.1 k8s_master
192.168.1.2 k8s_node
EOF
设置网桥参数
# 修改linux的内核采纳数,添加网桥过滤和地址转发功能
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
EOF
#重新加载配置
sysctl -p
#加载网桥过滤模板
modprobe br_netfilter
#查看网桥过滤模块是否加载成功
lsmod |grep br_netfilter
配置ipvs功能
[root@master ~]# yum install ipset ipvsadmin -y
#添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF> /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
3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
时间同步
yum install ntpdate -y
ntpdate time.windows.com
二.Kubernetes安装具体步骤
master和node节点都安装 Docker/kubeadm/kubelet/kubectl
Kubernetes 默认容器运行环境是Docker,因此首先需要安装Docker;
安装 Docker
更新docker的yum源
yum install wget -y
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-ce
必须制定–setopt=obsoletes=0,否则yum会自动安装更高版本
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
配置加速器加速下载
启动docker
systemctl start docker.service
cat >/etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":["https://8zt6iaba.mirror.aliyuncs.com"]
}
EOF
然后执行开机自动启动docker:
systemctl enable docker.service
那么接下来需要搭建:kubeadm、kubelet、kubectl
添加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
安装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
准备集群镜像
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
kubeadm config images list
# 下载镜像
# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
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节点上执行即可
192.168.1.100的IP改为自己的masterIP
# 创建集群
[root@master ~]# kubeadm init --apiserver-advertise-address=192.168.1.100 --kubernetes-version=v1.17.4 --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节点执行,加入master管理节点
kubeadm join 192.168.1.100:6443 --token 895tl0.dkvimb8ziy70nrdc --discovery-token-ca-cert-hash sha256:dcbf6c2cb7104c17d3ef293777b52d01386f1e67acf9b53a96500d20bf19a8d2
如果找不到token值,使用下面命令方法重新生成链接Token
kubeadm token create --print-join-command
在master节点查看是否加入成功 ,如图
kubectl get nodes
五.部署网络插件
只在master上操作
下载kube-flannel.yml文件(下载到master)
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
应用kube-flannel.yml文件得到运行时容器(在master机器上执行)
kubectl apply -f kube-flannel.yml
看到下图内容代表网络插件部署成功
查看是否状态为Ready
kubectl get nodes
查看运行时容器pod (一个pod里面运行了多个docker容器)
查看kube系统运行的容器
kubectl get pods -n kube-system
k8s环境就搭建好
部署nginx服务测试
#创建一个nginx服务
kubectl create deployment nginx --image=nginx:1.14-alpine
#暴露端口
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
#查看pod运行状态
kubectl get pod
#查看服务svc运行状态(svc=service)
kubectl get svc
通过masterIP:31511端口访问