Centos7 快速部署含Dashboard的kubernetes集群1.18.5
Centos7 快速部署含Dashboard的kubernetes集群1.18.5
kubernetes(K8S)是什么
Kubernetes(常简称为K8S)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括Docker等。我们可以将Docker看成Kubernetes内部使用的低级别组件。
为什么要使用kubernetes
Docker这个新兴的容器化技术当前应用越来越广,并且其从单机走向集群也称为必然,而云计算的蓬勃发展正在加速这一进程。kubernetes作为当前普遍被业界广泛认可和看好的docker分布式系统解决方案,前景非常可观。
使用Kubernetes可以做什么:
自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它
部署环境准备
1 主机信息
dera-dev-01 129.0.4.46
dera-dev-02 129.0.4.47
dera-dev-03 129.0.4.48
dera-dev-04 129.0.4.49
2 关闭防火墙及selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
3 修改hosts文件
dera-dev-01 129.0.4.46
dera-dev-02 129.0.4.47
dera-dev-03 129.0.4.48
dera-dev-04 129.0.4.49
cat << EOF > /etc/hosts
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
129.0.4.46 dera-dev-01
129.0.4.47 dera-dev-02
129.0.4.48 dera-dev-03
129.0.4.49 dera-dev-04
EOF
4 同步时间
yum install ntpdate -y
ntpdate cn.pool.ntp.org
5 增加网络转发
#桥接的IPV4流量传递到iptables 的链
cat < /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system //使配置生效
6 kube-proxy开启ipvs
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe – ip_vs
modprobe – ip_vs_rr
modprobe – ip_vs_wrr
modprobe – ip_vs_sh
modprobe – nf_conntrack_ipv4
EOF
7 安装组件
7.1 安装指定版本Docker
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-18.06.1.ce-3.el7 -y
systemctl start docker
systemctl enable docker
7.2 安装指定版本kubelet,kubeadm,kubectl
#添加阿里云YUM软件源
cat < /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
EOF
yum install -y kubectl-1.18.0 kubeadm-1.18.0 kubelet-1.18.0 --nogpgcheck
systemctl enable kubelet
7.3 初始化Master
kubeadm init
–apiserver-advertise-address=129.0.4.46
–image-repository registry.aliyuncs.com/google_containers
–kubernetes-version v1.18.0
–service-cidr=10.1.0.0/16
–pod-network-cidr=10.244.0.0/16
参数含义:
–kubernetes-version:指定kubeadm版本;
–pod-network-cidr:指定pod所属网络
–image-repository 指定下载源
–service-cidr:指定service网段,负载均衡ip
–ignore-preflight-errors=Swap/all:忽略 swap/所有 报错
7.4 增加kubectl权限访问
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown (id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
systemctl status kubelet.service
确认每个组件都是 Healthy 状态
kubectl get cs
查看node状态
kubectl get node
7.5 安装Pod网络插件(CNI)
kubectl apply -f kube-flannel.yml
源文件链接https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
我是服务器和本地浏览器都打不开使用百度网盘离线下载到本地上传至服务器安装
切记需要将yaml文件中的quay.io替换成quay-mirror.qiniu.com,不然因为墙的原因会无法下载镜像
kubectl get pod --all-namespaces -o wide
确保当前Pod 都是 running
再次查看node状态; pod状态变为 Ready
kubectl get nodes
安装完flannel,将配置拷到node节点,否则添加节点之后状态不对
scp -r /etc/cni [email protected]:/etc
scp -r /etc/cni [email protected]:/etc
scp -r /etc/cni [email protected]:/etc
#这一步也要拷贝,否则节点看着正常,但是pod由于网络原因无法创建
scp -r /run/flannel/ [email protected]:/run
scp -r /run/flannel/ [email protected]:/run
scp -r /run/flannel/ [email protected]:/run
7.6 增加node到集群里
kubeadm join 129.0.4.46:6443 --token 7vkpiw.lyav6s8xm2zf8map
–discovery-token-ca-cert-hash sha256:7d2c61854fa0752df0a650ce3f4aef584d7bb0a6a40fd4e2685ad89b2d6f8024
master查看
kubectl get nodes
#master执行
scp /etc/kubernetes/admin.conf [email protected]:/etc/kubernetes/
scp /etc/kubernetes/admin.conf [email protected]:/etc/kubernetes/
scp /etc/kubernetes/admin.conf [email protected]:/etc/kubernetes/
#然后在node执行下面三步
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown (id -g) $HOME/.kube/config
在node上查看
kubectl get nodes
8 安装Dashboard
https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
同样方法通过百度网盘离线下载到本地后上传到服务器
修改kubernetes-dashboard的service类型为NodePort类型,使用nodeport方式访问Dashboard
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort # 新增
ports:
- port: 443
targetPort: 8443
nodePort: 30443 # 新增
selector:
k8s-app: kubernetes-dashboard
kubectl create -f recommended.yaml
确认Dashboard 关联pod和service的状态
kubectl get pod,svc -n kubernetes-dashboard
Pod/kubernetes-dashboard一直处于 ImagePullBackOff
kubectl describe pods pod/kubernetes-dashboard-7b544877d5-sntcv
发现是镜像无法下载下来
配置阿里的docker加速器
手动pull该镜像
docker pull kubernetesui/dashboard:v2.0.0
重新执行
kubectl create -f recommended.yaml
再次查看
kubectl get pod,svc -n kubernetes-dashboard
创建serviceaccount和clusterrolebinding资源YAML文件
vim adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
创建admin-user并且赋予admin-user集权管理员权限
kubectl create -f adminuser.yaml
浏览器访问Dashboard UI
https://ip:30443
获取token,用于登录Dashboard UI
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk ‘{print $1}’)
输入第二部获取到的token值,点击登录按钮
参考资料:
https://www.cnblogs.com/chaofan-/p/12930199.html
https://zhuanlan.zhihu.com/p/92923128
https://www.jianshu.com/p/f4ac7f4555d3
https://www.cnblogs.com/caoxb/p/11243472.html
https://blog.****.net/qq_24137609/article/details/104061174
https://www.cnblogs.com/37yan/p/12530520.html
https://www.cnblogs.com/qingfeng2010/p/10540832.html