1.初始化服务器
-
关闭防火墙
#[所有主节点都执行] systemctl stop firewalld systemctl disable firewalld
-
关闭selinux
#[所有主节点都执行] setenforce 0 #修改开机启动配置 SELINUX=disabled vi /etc/selinux/config
-
配置主机名
#[所有主节点都执行] [主机名不一样] #[master1][node1][node2] hostnamectl set-hostname 主机名 #验证主机名 hostname
-
配置名称解析–>修改host文件
#[所有主节点都执行] vi /etc/hosts 192.168.64.130 master1 192.168.64.131 node1 192.168.64.132 node2 #验证网络 ping node1
-
配置时间同步
-
选择一个节点作为服务端,剩下的作为客户端
-
master1为时间服务器的服务端,其他的为时间服务器的客户端
#同步网络时间 yum -y install ntp ntpdate time.nist.gov
-
-
配置master1
yum install chrony -y vi /etc/chrony.conf #修改默认配置 #删除 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst #修改三项 server 127.127.1.0 iburst allow 192.168.64.0/24 local stratum 10 #启动服务端 systemctl start chronyd #设置自动启动 systemctl enable chronyd #检查是否启动 ss -unl | grep 123
-
配置k8s-node1 和 k8s-node2
yum install chrony -y vi /etc/chrony.conf #修改默认配置 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst #修改一项 server 192.168.64.130 iburst #启动服务端 systemctl start chronyd #设置自动启动 systemctl enable chronyd #检查时间是否同步 ^* k8s-master1 chronyc sources
-
-
关闭交换分区
#[所有主节点都执行] #关闭分区 swapoff -a #删除一行配置 #/dev/mapper/centos-swap swap vi /etc/fstab #检查是否关闭: Swap: 0 0 0 成功关闭 free -m
2.安装k8s集群
安装docker/kubeadm/kubelet【所有节点】
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce
$ systemctl enable docker && systemctl start docker
-
配置镜像下载加速器
$ vi /etc/docker/daemon.json { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } $ systemctl restart docker $ docker info # kubeadm-1.18.0 最新支持 docker-ce-19.03 # 如果阿里云没有19.03建议使用清华镜像 ######################################## ### 删除当前docker yum remove docker-ce wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo yum install docker-ce-19.03.8 -y ########################################
-
添加阿里云yum软件源
$ vi /etc/yum.repos.d/kubernetes.repo [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
-
安装kubeadm/kebelet/kubectl
$ yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0 $ systemctl enable kubelet
部署kubenetes master
# 在master节点执行
$ kubeadm init \
--apiserver-advertise-address=192.168.64.130 \
--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 \
--ignore-preflight-errors=all
# 等待执行完约5-10分钟
# 设置开机启动
$ systemctl enable kubelet.service
-
拷贝kubectl使用的连接k8s认证文件到默认路径
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config $ kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 2m v1.18.0
-
部署容器网络CNI
- 这里使用Flannel作为Kubernetes容器网络方案,解决容器跨主机网络通信。
Flannel是CoreOS维护的一个网络组件,Flannel为每个Pod提供全局唯一的IP,Flannel使用ETCD来存储Pod子网与Node IP之间的关系。flanneld守护进程在每台主机上运行,并负责维护ETCD信息和路由数据包。
#将https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 内容copy到kube-flannel.yml vi kube-flannel.yml # 安装 kubectl apply -f kube-flannel.yml # 查看安装进度 kubectl get pods -n kube-system
- 这里使用Flannel作为Kubernetes容器网络方案,解决容器跨主机网络通信。
-
加入kubernetes node
-
在node执行。
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
kubeadm join 192.168.64.130:6443 --token e4ea1z.ysk6hz3qt5h38o8y \ --discovery-token-ca-cert-hash sha256:b1df8edcda6e1673206dd817e1f77d9b832fafa44e366f0f2f87e861929c7a5b # 等待初始化完成
-
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
$ kubeadm token create $ kubeadm token list $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' 63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924 $ kubeadm join 192.168.64.130:6443 --token nuja6n.o3jrhsffiqs9swnu --discovery-token-ca-cert-hash sha256:63bca849e0e01691ae14eab449570284f0c3ddeea590f8da988c07fe2729e924
-
-
连接桌面管理工具lens
- 拷贝
$HOME/.kube
目录下config
文件内容 - 或者使用 kubernetes-dashboard
- 拷贝
-
部署kubernetes-dashboard[web ui]
-
先将yaml文件下载下来,修改里面镜像地址和Service NodePort类型。
# wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml #修改 image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 #image: registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 #修改 spec: type: NodePort #指定类型 ports: - port: 443 targetPort: 8443 nodePort: 30001 #对外暴漏端口 # kubectl apply -f kubernetes-dashboard.yaml #创建service account并绑定默认cluster-admin管理员集群角色: # 创建用户 $ kubectl create serviceaccount dashboard-admin -n kube-system # 用户授权 $ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin # 获取用户Token $ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}') # 访问 https://nodeip:30001/ 使用获取到的token登录
-