一、准备三台centos7服务器
(1) master节点:192.168.56.106
node1节点:192.168.56.107
node2节点:192.168.56.108
(2)查看master、node1、node2三台服务器的防火墙状态,关闭防火墙,并永久关闭防火墙
#查看防火墙状态(三台服务器分别执行)
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#永久关闭防火墙
systemctl disable firewalld
二、master、node1、node2节点安装docker
(1)#如果之前在服务器上安装过docker,卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#安装yum工具包
sudo yum install -y yum-utils
#设置docker的镜像仓库,我设置的是docker官方的镜像仓库源,也可以设置第三方镜像源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#安装docker前,先更新yum软件包索引
yum makecache fast
#安装docker-ce社区版,安装指令
sudo yum install docker-ce docker-ce-cli containerd.io
#如果输入以上指令,表示安装最新的docker-ce版本,我在我本地安装的是20.10.16
#输入指令,查看可以安装的docker版本
yum list docker-ce --showduplicates | sort -r
#安装30.10.16版本
yum install docker-ce-3:20.10.6-3.el7.x86_64 docker-ce-cli-3:20.10.6-3.el7.x86_64 container-io
#安装成功后,查看docker启动状态
systemctl status docker
#如果docker状态为dead,使用指令启动并设置开机启动
systemctl start docker && systemctl enable docker
#查看安装的docker版本
docker version
#设置docker镜像加速器,我是使用的是aliyun的镜像加速,登录自己的aliyun账号,在控制台->容器镜像服务->镜像工具->镜像加速器
#设置镜像加速器后,查看daemon.json内容
#重启docker-daemon服务,并重启docker服务,至此docker服务安装完成
systemctl daemon-reload && systemctl restart docker
三、master、node1、node2基于kubeadm安装kubernetes集群
(1)安装前前置环境(master、node1、node2都需要执行)
#修改hostname,master服务器修改为k8s-master,node1服务器修改为k8s-node1,node2服务器修改k8s-node2
master服务器:hostnamectl set-hostname k8s-master
查看master服务器主机名:hostname
node1服务器:hostnamectl set-hostname k8s-node1
查看node1服务器主机名:hostname
node2服务器:hostnamectl set-hostname k8s-node2
查看node2服务器主机名:hostname
#设置hostname解析,master、node1、node2都需要执行,执行成功后,查看hosts文件
echo "127.0.0.1 $(hostname)" >> /etc/hosts
cat /etc/hosts
#关闭selinux,master、node1、node2都需要关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
#关闭swap分区,master、node1、node22都需要关闭,使用free -m查看,如果swap显示0,那么表示swap已永久关闭
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#允许iptables检查桥接流量
#修改 /etc/sysctl.conf
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
# 可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p
(2) kubeadm安装kubernetes master、node1、node2服务器都需要执行!!!
# 配置K8S的yum源 配置aliyun的yum源,因为国外的yum访问不到
cat <<EOF > /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
EOF
# 卸载kubernetes旧版本
yum remove -y kubelet kubeadm kubectl
# 查看可以安装的kubernetes版本
yum list kubelet --showduplicates | sort -r
# 安装kubelet、kubeadm、kubectl 指定1.21版本
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
# 开机启动kubelet
systemctl enable kubelet && systemctl start kubelet
(3)初始化master节点!!!
############下载核心镜像 kubeadm config images list:查看需要哪些镜像###########
####封装成images.sh文件,标注:如果没有安装vim,使用
yum install -y vim
#建立image.sh文件
#!/bin/bash
images=(
kube-apiserver:v1.21.0
kube-proxy:v1.21.0
kube-controller-manager:v1.21.0
kube-scheduler:v1.21.0
coredns:v1.8.0
etcd:3.4.13-0
pause:3.4.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
#####封装结束,新建的image.sh没有执行权限,需要给赋予执行权限
chmod +x images.sh && ./images.sh
### registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns:v1.8.0
###查看下载到本地的镜像,总共由七个镜像(kube-apiserver、kube-proxy、kube-controller-manager、kube-scheduler、pause、coredns、etcd)
docker images
##注意1.21.0版本的k8s coredns镜像比较特殊,结合阿里云需要特殊处理,重新打标签
docker tag registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns:v1.8.0 registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns/coredns:v1.8.0
########kubeadm init 初始化一个master########################
########kubeadm join 其他worker加入集群########################
kubeadm init \
--apiserver-advertise-address=192.168.56.106 \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.21.0 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.101.0/16
## 注意:pod-cidr与service-cidr
# cidr 无类别域间路由(Classless Inter-Domain Routing、CIDR)
# 指定一个网络可达范围 pod的子网范围+service负载均衡网络的子网范围+本机ip的子网范围不能有重复域
######按照提示继续######
## init完成后第一步:复制相关文件夹
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
## 导出环境变量
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
### 部署一个pod网络
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
##############如下:安装calico#####################
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
### 命令检查
kubectl get pod -A ##获取集群中所有部署好的应用Pod,标注:STATUS状态必须全部为Running才表示启动成功
kubectl get nodes ##查看集群所有机器的状态,标注:STATUS状态必须全部为Ready才表示节点启动成功
(4)初始化worker节点(node1、node2节点)标注:master服务器也可以执行该指令!!!把master作为一个worker节点加入到集群中!!!
#node1、node2节点加入到集群中
Then you can join any number of worker nodes by running the following on each as root:
#如果加入集群指令过期怎么办???
#使用以下指令在master服务器上执行,得到新的令牌!!!
kubeadm token create --print-join-command
###查看集群中所有的pod
kubectl get pod -A
##也可以使用以下指令监听查看pod启动过程
watch kubectl get pod -A
#验证集群,获取所有节点
kubectl get nodes
#给节点打标签
## k8s中万物皆对象。node:机器 Pod:应用容器
###node1加标签 《》
kubectl label node k8s-node1 node-role.kubernetes.io/worker='node1'
kubectl label node k8s-node2 node-role.kubernetes.io/worker='node2'
## k8s集群,机器重启了会自动再加入集群,master重启了会自动再加入集群控制中心
##设置ipvs模式
###k8s整个集群为了访问通;默认是用iptables,性能下(kube-proxy在集群之间同步iptables的内容)
###查看pod详细信息
kubectl get pod -A -o wide
#1、查看默认kube-proxy 使用的模式
kubectl logs -n kube-system kube-proxy-28xv4
#2、需要修改 kube-proxy 的配置文件,修改mode 为ipvs。默认iptables,但是集群大了以后就很慢
kubectl edit cm kube-proxy -n kube-system
修改如下
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictARP: false
syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 127.0.0.1:10249
mode: "ipvs"
###修改了kube-proxy的配置,为了让重新生效,需要杀掉以前的Kube-proxy
kubectl get pod -A|grep kube-proxy
master节点:kubectl delete pod kube-proxy-6cg24 -n kube-system
node1节点:kubectl delete pod kube-proxy-gv6sh -n kube-system
node2节点:kubectl delete pod kube-proxy-pqlc8 -n kube-system
### 修改完成后可以重启kube-proxy以生效,删除kube-proxy后,生成新的kube-proxy的pod信息
至此,docker和kubernetes已安装完成!!!
四、结尾
(1)master、node1、node2关机重启后,kubernetes会自动重新启动!!!