环境
系统:Centos7.4-1708
光盘源:Centos7.4-1708
master节点:192.168.199.61
node1节点:192.168.199.62
node2节点:192.168.199.63
node3节点:192.168.199.64
mysql节点:192.168.199.70
准备工作
1、【all】准备yum源,这里采用的是光盘源Centos7.4-1708
2、【all】关闭firewalld,selinux,NetworkManager
systemctl stop firewalld ; systemctl mask firewalld ; systemctl stop NetworkManager ; systemctl disable NetworkManager ; setenforce 0 ; sed -i 's/SELINUX=enfircing/SELINUX=disabled/g' /etc/selinux/config
3、【all】部署时间同步服务,同步地址为:ntp1.aliyun.com,修改系统的时区为上海,安装ntpdate,同步阿里云时间服务器
vim /etc/chrony.conf
systemctl restart chronyd
systemctl enable chronyd
timedatectl set-timezone Asia/Shanghai
ntpdate ntp1.aliyun.com
4、新建k8s的集群数据iptables规则
cat > /etc/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
5、关闭swap分区
6、地址解析
cat >> /etc/hosts << EOF
> 192.168.199.61 ku-master
> 192.168.199.62 ku-node1
> 192.168.199.63 ku-node2
> 192.168.199.64 ku-node3
> 192.168.199.70 mysql
> EOF
swapoff -a
一、部署Kubernetes
1、【all】部署docker,采用的版本是docker-ce-18.06.1版本
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum clean all ; yum repolist
yum -y install docker-ce-18.06.1.ce-3.el7
报错:
提示container-selinux版本过低。解决的办法参考文章https://www.jianshu.com/p/24d480efe48a
这个报错是container-selinux版本低或者是没安装的原因
需要安装epel源 才能yum安装container-selinux
然后在安装docker-ce就可以了。
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
#阿里云上的epel源yum -y install container-selinux
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker ; systemctl start docker
2、【all】部署kubernetes的组件:kubeadm,kubectl,kubelet。使用版本1.15.0版本
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_check=0
> gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF
yum clean all ; yum repolist
yum -y install kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
systemctl enable kubelet.service
3、【master】初始化master节点。
kubeadm init --apiserver-advertise-address=192.168.199.61 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
根据提示执行3条命令,保存下面红框的命令。这个命令是node节点加入集群的命令
4、【all】部署flannel组件,实现各节点间的通信
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
修改kube-flannel.yml文件
修改成为李振良老师的源即可
【all】所有节点,docker拉取flannel的组件到本地
docker pull lizhenliang/flannel:v0.11.0-amd64
【master】根据修改后的kube-flannel.yml文件,启动pod
kubectl apply -f kube-flannel.yml
查询k8s中的pod,svc情况
查看节点情况
4、【node】所有node节点,加入集群当中
kubeadm join 192.168.199.61:6443 --token owgoqb.x22rrlcaor6mt90x \
--discovery-token-ca-cert-hash sha256:8f55e34dcafb088e94e3c2dbeaee39cdd9fa15c856676dd2fc4525fbc2132936
查询nodes情况
5、【master】部署kubernetes可视化组件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
启动pod
kubectl apply -f recommended.yaml
创建账号,绑定账号角色与admin关联,过滤出登录令牌
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
保存令牌
二、kubernetes的简单使用
1、利用控制器deployment进行pod的部署,例如部署一个nginx的pod
kubectl create deployment nginx --image=nginx #新建pod
kubectl expose deployment nginx --port=80 --type=NodePort #暴露端口
访问测试:http://ip:30807
2、扩容pod的副本数
kubectl scale deployment nginx --replicas=3
3、停止/删除pod
kubectl delete deployment nginx
kubectl delete service nginx
4、利用pod模板(deployment控制器方式)和service模板,自定义启动pod
kubectl create deployment nginx --image=nginx --dry-run -o yaml > deploy.yaml #生成pod模板
vim deploy.yaml
kubectl apply -f deploy.yaml
kubectl expose deployment nginx --port=80 --type=NodePort --dry-run -o yaml > svc.yaml #生成暴露服务的yaml文件
vim svc.yaml
kubectl apply -f svc.yaml
5、利用pod模板(利用pod容器信息)和service模板,自定义启动pod,启动一个pod,一组容器写入数据,一组容器读取数据。验证pod中共用存储。
kubectl get pod nginx-554b9c67f9-tdqns -o yaml > pod.yam
vim pod.yaml
kubectl apply -f pod.yaml
kubectl exec -it my-pod -c write bash #验证
kubectl exec -it my-pod -c read bash #验证