Centos7部署Kubernetes
1、准备两天服务器,一台作为主节点,一台作为从节点172.28.26.158 k8s-master172.28.26.15 k8s-node12、设置主机的名称,方便部署时区别节点。hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-node13、master主机和node主机需要关闭的内容systemctl stop f
1、准备两天服务器,一台作为主节点,一台作为从节点
172.28.26.158 k8s-master
172.28.26.15 k8s-node1
2、设置主机的名称,方便部署时区别节点。
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
3、master主机和node主机需要关闭的内容
systemctl stop firewalld 关闭防火墙
systemctl disable firewalld
setenforce 0 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
swapoff -a 临时关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
4、在vim /etc/hosts下面配置
master的配置:
172.28.26.158 k8s-master
172.28.26.159 k8s-node1
node配置:
172.28.26.158 k8s-master
172.28.26.159 k8s-node1
5、时间同步
yum install ntpdate -y
ntpdate time.windows.com
6、设置网桥参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
7、安装kubeadm、kubelet、kubectl
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
安装
# 安装kubeadm、kubectl、kubelet
yum install -y kubectl-1.16.0-0 kubeadm-1.16.0-0 kubelet-1.16.0-0
# 启动kubelet服务
systemctl enable kubelet && systemctl start kubelet查看版本
9、部署Kubernetes Master主节点
# 下载管理节点中用到的6个docker镜像,你可以使用docker images查看到
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --apiserver-advertise-address 172.28.26.158 --pod-network-cidr=10.244.0.0/16 --token-ttl 0
按照官方的提示进行操作
出现各种报错
我们先查看 kubelet的运行情况
发现有错误,该问题是cgroup与systemd相关的错误,需要修改配置文件
解决方法如下
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
#在ExecStart后加入
--feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false
随后再次重启kubelet服务
systemctl daemon-reload && systemctl restart kubelet
systemctl status kubelet
然后我们kubelet get nodes,报错
这时我们还需要解决
If you wish to reset iptables, you must do so manually by using the "iptables" command.这个问题
针对这个,我们用命令 kubeadm reset
然后出现这些问题,解决方法如下
手工清除:
删除net.d
rm -rf /etc/cni/net.d
重置iptables
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
sysctl net.bridge.bridge-nf-call-iptables=1
手动执行以下命令来清除对应的残余网卡信息:
sudo ip link
del cni0
sudo ip link
del flannel
.1
删除 $HOME/.kube/config
rm -rf $HOME/.kube/config
启用 IPVS
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
导出并修改配置文件
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
配置文件如下
dnsDomain: cluster.local
# 主要修改在这里,替换 Calico 网段为我们虚拟机不重叠的网段(这里用的是 Flannel 默认网段)
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
10、kubeadm 初始化
11、获取将node加入集群的命令
同master节点操作,一直做到
# 启动kubelet服务
systemctl enable kubelet && systemctl start kubelet
到这一步,与上面安装master节点步骤相同,下面开始不一样的操作
首先,我们进入master节点,输入
kubeadm token create --print-join-command
此时,master节点已经加入了集群,然后我们
kubectl get nodes
然后我们进入node节点输入
kubeadm join 172.28.26.158:6443 --token csguyu.alyveqybktpe2z2l --discovery-token-ca-cert-hash sha256:9c3801d93aee7601c0bb9bf77a6f68fa87f4451e1e9c78459b912b02d7b3f4cb
这个就是刚刚master节点输入kubeadm token create --print-join-command
得到的命令
然后我们继续来到master节点下,输入
kubectl get nodes
说明我们节点已经加入成功,但是我们的节点状态还是NotReady的状态
12、安装flannel(master节点)
下载官方fannel配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
无法下载,在/etc/hosts文件添加一条
199.232.68.133 raw.githubusercontent.com
重新执行命令
输入命令查看
kubectl create -f kube-flannel.yml
kubectl get pod -n kube-system
启动失败
检查之前命令没有问题后,查看连接的kube-flannel.yml
vim kube-flannel.yml
发现里面有
quay.io/coreos/flannel:v0.11.0-arm64
这种镜像,访问不到quay.io,被墙了。
拷贝kube-flannel.yml内容到本地文件。
然后替换了所有quay.io为quay-mirror.qiniu.com
然后我们
kubectl apply -f kube-flannel.yml
然后我发现quay-mirror.qiniu.com也进不去,只好手动下载
Releases · flannel-io/flannel · GitHub
把文件下载到桌面,然后上传到后端根目录下
我们执行
docker load < flanneld-v0.12.0-amd64.docker
然后再一次
kubectl apply -f kube-flannel.yml
kubectl get pod -n kube-system
然后再一次
kubectl get nodes
启动成功
13、K8s-Dashboard 安装
获取dashboard镜像
下载yaml文件
这里由于在github官网上,无法直接下载,我们到网页上,下载
https://github.com/kubernetes/dashboard/releases
下载2.0.0-rc3版本
然后把文件放进后端
kubectl apply -f recommended.yaml
kubectl get pods --all-namespaces | grep dashboard
我们进入recommended.yaml
Vim recommended.yaml
修改版本号
然后我们重新上面的操作
kubectl apply -f recommended.yaml
kubectl get pods --all-namespaces | grep dashboard
然后我们
kubectl get svc --all-namespaces
删除现有的 dashboard 服务,dashboard 服务的 namespace 是 kubernetes-dashboard,但是该服务的类型是ClusterIP,不便于我们通过浏览器访问,因此需要改成 NodePort 类型的
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
kubectl get svc --all-namespaces
创建配置文件dashboard-svc.yaml
touch dashboard-svc.yaml
vim dashboard-svc.yaml
输入以下内容
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
保存退出
创建该 Service
kubectl apply -f dashboard-svc.yaml
再次查看服务
kubectl get svc --all-namespaces
创建 kubernetes-dashboard 管理员角色,dashboard-svc-account.yaml内容如下:
touch dashboard-svc-account.yaml
vim dashboard-svc-account.yaml
输入以下内容
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
保存退出
执行创建 kubectl apply -f dashboard-svc-account.yaml
获取 token,就可以在浏览器登录了
kubectl get secret -n kube-system |grep admin|awk '{print $1}'
kubectl describe secret dashboard-admin-token-s645c -n kube-system|grep '^token'|awk '{print $2}'
13、我们再执行一次命令,查看外部访问端口,也就是刚刚我们创建的 Service
kubectl get svc --all-namespaces | grep dashboard
这边我做了一个操作,我去服务器所在的安全组,开放了端口,然后到浏览器上输入
到这里Kubernetes 就部署完全成功了
更多推荐
所有评论(0)