k8s-kubeadm安装-02
官方资料:https://feisky.gitbooks.io/kubernetes/components/kubeadm.html[Kubernetes] 国内获取 Kubernetes 镜像的方法https://blog.csdn.net/shida_csdn/article/details/78480241https://www.cnblogs.com/fengzhihai/p/984...
官方资料:https://feisky.gitbooks.io/kubernetes/components/kubeadm.html
[Kubernetes] 国内获取 Kubernetes 镜像的方法
https://blog.csdn.net/shida_csdn/article/details/78480241
https://www.cnblogs.com/fengzhihai/p/9849683.html
Rancher方式:
二次封装的常用发行版【可视化构建kubernetes】
minikube方式:
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,适合尝试Kubernetes或日常开发的用户使用,但是不能用于生产环境。
kubeadm方式:
Kubeadm也是一个工具,提供kubeadm init和kubeadm join,可用于快速部署Kubernetes集群。
二进制包方式:
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群,过程较为繁琐。
本例使用kubeadmin工具安装。
安装要求:
1、centos7.X
2、2G、2C、30GB
3、集群之间网络互通
4、可以访问外网,需要拉去镜像
部署步骤:
0、设置先设条件
1、在所有节点上安装Doctor和kubeadm、kubelet
2、部署kubernetes的Master
3、部署容器网络插件
4、部署kubernetes Node,将节点加入到kubernetes集群中
5、部署Dashboard Web页面,可视化查看Kubernetes资源
先设条件【所有节点】:
1、关闭防火墙【影响通信,学习,也可以将默认的规则清空重新生成】
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
2、关闭selinux:linux下的一个安全机制,主要是对文件系统访问做一个权限控制,这个权限控制会影响到kubernetes中的一个组件kuberlete的安装,因为这个组件的安装会访问本地的文件操作系统
setenforce 0
vim /etc/selinux/config :# 更改为 SELINUX=disabled
getenforce:快照查询
3、禁止swap分区:swap分区的作用是当物理内存不足时,利用swap分区做数据交换,但是在kubernetes中完全不支持swap分区,所以必须禁止掉,或者创建系统的时候就不创建他
临时关闭:swapoff -a
永久性关闭: vim /etc/fstab
中注释掉:/dev/mapper/centos-swap swap swap defaults 0 0
sysctl --system
4、添加主机名和对应ip的关系
ip1 主机名1
ip2 主机名2
ip3 主机名3
5、时间同步【启动chronyd系统服务】
systemctl start chronyd.service
systemctl enable chronyd.service
6、将桥接的IPv4流量传递到iptables的链【有一些ipv4的流量不能走iptables链【linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理】,导致流量丢失】:
配置k8s.conf文件(#k8s.conf文件原来不存在,需要自己创建的)
cat /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
vm.swappiness=0
sysctl --system
安装安装Doctor、kubeadm【引导集群的客户端工具】、kubelet【kubernetes中管理容器】【所有节点】
1、安装Docker
配置Docker官方源并将下载的源文件存放于/etc/yum.repos.d/下:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
安装:yum -y install docker-ce-18.06.1.ce-3.el7
设置开机启动并启动docker:systemctl enable docker && systemctl start docker
2、安装kubeadm、kubelet、kubectl
配置kubernetes的阿里YUM软件源: 放在 /etc/yum.repos.d 目录下,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
安装:
yum install -y kubelet-1.13.3
yum install -y kubeadm-1.13.3
yum install -y kubectl-1.13.3
systemctl enable kubelet【此时此刻不需要启动kubelet,因为最后kubeadm会一键部署,仅仅设置开机启动即可】
部署【初始化】kubernetes Master【Master节点】
kubeadm init \
--apiserver-advertise-address 192.168.88.149 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.13.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
使用kubectl工具,执行:
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 node
记住:
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.88.149:6443 --token qlzhpw.fy30lar1jiz11xbw --discovery-token-ca-cert-hash sha256:ed2f22c8a4727f7be52a1495b49e52638e1f79107677daf6722dfa009218f2e8
安装Pod网络插件【master节点,node节点加入后自动下载】
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看状况:
kubectl get pods -n kube-system
kubectl get node
将node节点加入网络【node节点执行】:
kubeadm join 192.168.88.153:6443 --token nrd1eg.xzb1h6nkkazjt5fg --discovery-token-ca-cert-hash sha256:73c8b0c56493929ed8d2a5b7641110df9187641455415eb6240569026bd460c8
kubectl get node
举例:创建一个nginx的pod
kubectl create deployment nginx --image=nginx
创建service:暴露容器让外部访问【--type=NodePort说明创建的是NodePort类型,则通过任意一个NodeIP+Port就可以访问】:
kubectl expose deployment nginx --port=80 --type=NodePort
查看pod详情:kubectl get pods,svc -o wide
192.168.88.151:30344
192.168.88.152:30344
192.168.88.153:30344
kubernetes-dashboard安装
https://blog.csdn.net/weixin_41806245/article/details/89381752
[Kubernetes] 国内获取 Kubernetes 镜像的方法
https://blog.csdn.net/shida_csdn/article/details/78480241
https://www.cnblogs.com/fengzhihai/p/9849683.html
主要参考:https://blog.csdn.net/java_zyq/article/details/82178152
验证:kubectl get pods -n kube-system
kubernetes的webui配置:dashboard
1、下载安装yaml文件:wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
2、装备镜像
3、修改安装文件
需要给外部暴露端口所以:
# ------------------- Dashboard Service ------------------- #
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30001 # 指定对外端口
selector:
k8s-app: kubernetes-dashboard
因为网络问题需要提前自行装备镜像并修改:
# ------------------- Dashboard Deployment ------------------- #
image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
4、创建Dashboard
kubectl apply -y kubernetes-dashboard.yaml
等待查看[kubectl get pods,svc -o wide -n kube-system]dashboard处于running状态后即可访问。
此处坑多:尤其是镜像问题。
1、配置镜像和仓库已经下载的镜像对应不上而导致脚本自行下载不下来而出错。
2、配置成功后仅仅可以在部署节点利用https+ip+端口方式访问,不能在宿主机访问。
3、进入后登陆方式待后续。
5、访问Dashboard:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above
访问有如下三种方式:
1、NodePort【节点主机访问】
至此就可以使用NodePort访问Dashboard。可以在部署节点利用https+ip+端口方式访问,不能在宿主机访问。
2、kubectl proxy【宿主机】最简单的方式就是开启代理方式可以在宿主机访问:
在Master上执行kubecll proxy,然后使用如下地址访问Dashboard:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
但限制就是必须在Master上访问,这显然是个坑,我们的目标是在我们真实的物理机上去访问Master的Dashboard。
所以,在主节点上,我们执行kubectl proxy --address=192.168.56.101 --disable-filter=true开启代理。
显示如下说明代理开启:
W0515 09:16:46.963911 27314 proxy.go:140] Request filter disabled, your proxy is vulnerable to XSRF attacks, please be cautious
Starting to serve on 192.168.88.151:8001
其中:
address表示外界可以使用192.168.56.101来访问Dashboard,我们也可以使用0.0.0.0
disable-filter=true表示禁用请求过滤功能,否则我们的请求会被拒绝,并提示 Forbidden (403) Unauthorized。
我们也可以指定端口,具体请查看kubectl proxy --help
3、apiserver
4、Ingress
6、登陆Dashboard
A、token方式登陆:
创建SA,并绑定默认cluster-admin【k8s的超级管理员】管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
查看刚刚创建dashboard-admin的token信息
kubectl get secret -n kube-system
kubectl describe secret dashboard-admin-token-sprhf -n kube-system
B、点击跳过使用默认方式登陆:
此时方式登陆之后整个页面提示:很遗憾,我们看到了很多权限错误提示,主要是system:serviceaccount:kube-system:kubernetes-dashboard的权限不足引起的。
因为权限的问题,所以需要在kubernetes-dashboard.yaml中对默认登陆用户设置更高权限的角色,
因此,我们可以更改RoleBinding修改为ClusterRoleBinding,并且修改roleRef中的kind和name,
使用cluster-admin这个非常牛逼的CusterRole(超级用户权限,其拥有访问kube-apiserver的所有权限)。如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-minimal
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
当主节点ip发生变化时,重新构建集群步骤:
1、修改hosts文件【各节点】
2、kubeadm reset
或者
尝试
systemctl stop kubelet;
docker rm -f -v $(docker ps -q);
find /var/lib/kubelet | xargs -n 1 findmnt -n -t tmpfs -o TARGET -T | uniq | xargs -r umount -v;
rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd;
参考:https://www.colabug.com/596892.html
3、删除 /root/.kube/ 下文件和目录
4、docker ps 查看
5、修改--apiserver-advertise-address参数 重新构建
kubeadm init \
--apiserver-advertise-address 192.168.88.153 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.13.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
后续一样,使用kubectl工具、安装pod网络kube-flannel、加入节点
当子节点ip发生变化时,重新构建集群步骤:
1、修改hosts文件【各节点】
2、kubeadm reset
3、执行更新后的:kubeadm join 192.168.88.153:6443 --token nrd1eg.xzb1h6nkkazjt5fg --discovery-token-ca-cert-hash sha256:73c8b0c56493929ed8d2a5b7641110df9187641455415eb6240569026bd460c8
4、可能会报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?
解决方法如下:
1、将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下
2、配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
立即生效:source ~/.bash_profile
问题:子节点执行kubectl get pods报错:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行。
解决方法如下:
1、将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下
2、配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
立即生效:source ~/.bash_profile
参考:https://www.jianshu.com/p/6fa06b9bbf6a
kubeadm 续坑篇
https://www.colabug.com/596892.html
https://mritd.me/2016/11/21/kubeadm-other-problems/
kubeadm常用命令:
kubectl:常用操作命令:
创建:kubectl run <name> --image=<image> 或者 kubectl create -f manifest.yaml
查询:kubectl get <resource>
更新 kubectl set 或者 kubectl patch
删除:kubectl delete <resource> <name> 或者 kubectl delete -f manifest.yaml
查询 Pod IP:kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'
查看状况:
kubectl get pods -n kube-system
kubectl get node
查看pod详情:
kubectl get pods,svc -o wide
kubectl get node
查看在哪个节点上:kubectl get pods -o wide
查看指定命名空间:kube-system下:kubectl get pods -n kube-system
查看所有命名空间:kubectl get pod --all-namespaces
容器内执行命令:kubectl exec -ti <pod-name> sh
容器日志:kubectl logs [-f] <pod-name>
导出服务:kubectl expose deploy <name> --port=80
kubectl logs 用于显示 pod 运行中,容器内程序输出到标准输出的内容。跟 docker 的 logs 命令类:kubectl logs nginx
kubectl attach 用于连接到一个正在运行的容器。跟 docker 的 attach 命令类似
kubectl exec 用于在一个正在运行的容器执行命令。跟 docker 的 exec 命令类似。
kubectl exec 123456-7890 date
Options:
-c, --container='': Container name. If omitted, the first container in the pod will be chosen
-p, --pod='': Pod name
-i, --stdin=false: Pass stdin to the container
-t, --tty=false: Stdin is a TT
kubectl cp 支持从容器中拷贝,或者拷贝文件到容器中
https://feisky.gitbooks.io/kubernetes/components/kubectl.html
待解决问题1:
kubectl logs podname 不起作用
升级内核并配置:https://blog.csdn.net/zcc_heu/article/details/78822551
kubernetes的webui配置:dashboard
1、下载安装yaml文件:wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
2、装备镜像
3、修改安装文件
需要给外部暴露端口所以:
# ------------------- Dashboard Service ------------------- #
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30001 # 指定对外端口
selector:
k8s-app: kubernetes-dashboard
因为网络问题需要提前自行装备镜像并修改:
# ------------------- Dashboard Deployment ------------------- #
image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
4、创建Dashboard
kubectl apply -y kubernetes-dashboard.yaml
等待查看[kubectl get pods,svc -o wide -n kube-system]dashboard处于running状态后即可访问。
此处坑多:尤其是镜像问题。
1、配置镜像和仓库已经下载的镜像对应不上而导致脚本自行下载不下来而出错。
2、配置成功后仅仅可以在部署节点利用https+ip+端口方式访问,不能在宿主机访问。
3、进入后登陆方式待后续。
5、访问Dashboard:https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above
访问有如下三种方式:
1、NodePort【节点主机访问】
至此就可以使用NodePort访问Dashboard。可以在部署节点利用https+ip+端口方式访问,不能在宿主机访问。
2、kubectl proxy【宿主机】最简单的方式就是开启代理方式可以在宿主机访问:
在Master上执行kubecll proxy,然后使用如下地址访问Dashboard:
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
但限制就是必须在Master上访问,这显然是个坑,我们的目标是在我们真实的物理机上去访问Master的Dashboard。
所以,在主节点上,我们执行kubectl proxy --address=192.168.56.101 --disable-filter=true开启代理。
显示如下说明代理开启:
W0515 09:16:46.963911 27314 proxy.go:140] Request filter disabled, your proxy is vulnerable to XSRF attacks, please be cautious
Starting to serve on 192.168.88.151:8001
其中:
address表示外界可以使用192.168.56.101来访问Dashboard,我们也可以使用0.0.0.0
disable-filter=true表示禁用请求过滤功能,否则我们的请求会被拒绝,并提示 Forbidden (403) Unauthorized。
我们也可以指定端口,具体请查看kubectl proxy --help
3、apiserver
4、Ingress
6、登陆Dashboard
A、token方式登陆:
创建SA,并绑定默认cluster-admin【k8s的超级管理员】管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
查看刚刚创建dashboard-admin的token信息
kubectl get secret -n kube-system
kubectl describe secret dashboard-admin-token-sprhf -n kube-system
B、点击跳过使用默认方式登陆:
此时方式登陆之后整个页面提示:很遗憾,我们看到了很多权限错误提示,主要是system:serviceaccount:kube-system:kubernetes-dashboard的权限不足引起的。
因为权限的问题,所以需要在kubernetes-dashboard.yaml中对默认登陆用户设置更高权限的角色,
因此,我们可以更改RoleBinding修改为ClusterRoleBinding,并且修改roleRef中的kind和name,
使用cluster-admin这个非常牛逼的CusterRole(超级用户权限,其拥有访问kube-apiserver的所有权限)。如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-minimal
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
搭建K8S Ingress:https://blog.csdn.net/java_zyq/article/details/82179107
至此
1、创建Dashboard
https://blog.csdn.net/java_zyq/article/details/82178152
http://192.168.88.151:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
kubectl proxy --address=192.168.88.151 --disable-filter=true
2、访问Dashboard
创建SA,并绑定默认cluster-admin【k8s的超级管理员】管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
查看刚刚创建dashboard-admin的token信息
kubectl get secret -n kube-system
kubectl describe secret dashboard-admin-token-sprhf -n kube-system
更多推荐
所有评论(0)