前提
(1)三台能联网的虚拟机
(2)操作系统 CentOS7 64位
集群中所有服务器之间可以网络互通,访问外网
禁止swap分区
安装步骤
环境配置
关闭防火墙(master221,slave223,slave224)
systemctl stop firewalld systemctl disable firewalld
关闭selinux(master221,slave223,slave224)
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 临时
关闭swap (master221,slave223,slave224)
swapoff -a # 临时 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
根据规划设置主机名(根据自己的命名,去每一台执行自己的命令)
hostnamectl set-hostname master221 #在221结点执行 hostnamectl set-hostname slave222 #在222结点执行 hostnamectl set-hostname slave223 #在223结点执行
在master添加hosts(master221,slave223,slave224)
cat >> /etc/hosts << EOF 192.168.129.221 master221 192.168.129.223 slave223 192.168.129.224 slave224 EOF
将桥接的IPv4流量传递到iptables的链(master221,slave223,slave224)
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
sysctl --system #生效
时间与windows同步
yum install ntpdate -y ntpdate time.windows.com
安装Docker(master221,slave223,slave224)
安装Docker
#下载指定版本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.1.ce-3.el7 #开启docker服务 systemctl enable docker && systemctl start docker #查看docker版本 docker --version #查看docker信息 docker info
设置docker仓库为阿里镜像仓库
cat > /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } EOF # 重启docker systemctl restart docker # 查看仓库是否加入成功 docker info
添加阿里云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(master221,slave223,slave224)
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 systemctl enable kubelet
部署k8s master、加入node
在192.168.129.221(master221)上执行
注意:apiserver-advertise-address属性值为master221的ip
kubeadm init \ --apiserver-advertise-address=192.168.129.221 \ --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执行方框1里面的内容(master221)
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
查询节点(master221)
kubectl get nodes
slave结点加入集群(slave223,slave224)
注意:下面内容为上上图上方框中的内容
kubeadm join 192.168.129.221:6443 --token un45uv.6l06g4q8alkcgelb \ --discovery-token-ca-cert-hash sha256:46617920d7a26a52d5d1330ab07f6af778e59db921c691c04d7679c0dab0eacc
查询结点(master221,slave223,slave224)
kubectl get nodes
注意:此时在slave223,slave223中执行上面遇见可能会出现下面情况,解决情况如下:
export KUBECONFIG=/etc/kubernetes/admin.conf 最后是admin.conf文件,你要看看你的文件叫什么名字,我的文件叫kubelet.conf
部署CNI网络插件
在主结点部署CNI(master221)
注意:如果出现连接失败,多执行几次
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看pod的状态
kubectl get pods -n kube-system
稍等片刻再次执行,上面的命令,直到上图中所有的STATUS为runing
查询结点(master221,slave223,slave224)
kubectl get nodes
此时所有的结点状态为Ready状态
测试集群
在Kubernetes集群中创建一个nginx pod,验证是否正常运行
#创建pod kubectl create deployment nginx --image=nginx #暴露端口 kubectl expose deployment nginx --port=80 --type=NodePort #查看pod,service信息 kubectl get pod,svc
http://192.168.129.221:32373/ 就访问到nginx