很多小伙伴想学kubernetes,都会遇到这些问题
手里没有可用的服务器 打开kubernetes官方文档,看到复杂的组件学不下去
今天就介绍一种省钱省时的方式来玩kubernetes
准备服务器
很多小伙伴电脑配置比较高,可以直接用虚拟机开两台机器,至少得确保自己的电脑16G内存以上
我一个穷鬼,用着8G内存小本,没办法,我选择云服务器
在阿里云平台充值100块,选择按量付费,每小时3毛钱的2c4G突发性能实例,玩一晚上也就一罐红牛的价格
服务器开好就可以开始部署kubernetes了,本文采用kubeadm方式快速搭建kubernetes集群
修改系统参数 加载br_netfilter模块 查看是否加载br_netfilter lsmod | grep br_netfilter 加载br_netfilter modprobe br_netfilter 或者修改module-load文件 cat <> /etc/hosts << EOF 192.168.4.34 k8s-master 192.168.4.35 k8s-node01 EOF 设置时钟同步,用ntpdate或chronyd yum -y install epel-release chrony && systemctl enable chronyd && systemctl start chronyd 安装docker # 配置docker-ce的yum源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo # 安装docker-ce yum -y install docker-ce # 设置开机自启动并启动docker systemctl enable docker && systemctl start docker # 查看docker版本 docker version 配置kubernetes的yum源 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_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF 安装kubeadm、kubelet、kubectl yum -y install kubeadm kubelet kubectl systemctl enable kubelet
kubelet是kubernetes项目用来操作Docker等容器运行时的核心组件,在每个节点上都存在,可以说除了跟容器运行时打交道外,kubelet在配置容器网络、管理容器数据卷时,他都需要直接操作宿主机
如果kubelet本身就是运行在一个容器里,那么直接操作宿主机就会变的很麻烦,所以为了解决这个问题,kubeadm选择直接将kubelet部署在宿主机上,然后使用容器部署其他组件
部署kubernetes Master kubeadm init –apiserver-advertise-address=172.22.29.78 –image-repository registry.aliyuncs.com/google_containers –kubernetes-version v1.21.2 –service-cidr=10.1.0.0/16 –pod-network-cidr=10.244.0.0/16
提示coredns:v1.8.0不存在,解决办法:
# 添加docker加速器 tee /etc/docker/daemon.json <<-EOF { “registry-mirrors”: [“https://fl791z1h.mirror.aliyuncs.com”] } EOF systemctl daemon-reload systemctl restart docker # 手动下载coredns镜像 docker pull coredns/coredns:1.8.0 # 修改镜像tag docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:v1.8.0
之后再重新初始化
最后生成的join部分是节点加入集群的命令
根据提示操作,创建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自动补充 source <(kubectl completion bash)
默认token有效期24小时,过期后token不可用,如果后续有node加入,解决方法是重新生成token
kubeadm token create 查看token kubeadm token list
查看pod kubectl get pod –all-namespaces
可以看到coredns的pod没有启动,是pending状态,node节点为NotReady,缺少网络pod
node加入集群 kubeadm join 172.22.29.78:6443 –token gtj686.cu5kxoxbgq8iha4m –discovery-token-ca-cert-hash sha256:e6aa8e197b74a08d9bae4b5d72854a49980539bc504691440fe5d716a3d299d9
查看node
安装网络,这里选择calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
安装后查看pod状态
从下载镜像到初始化到running状态
calico网络安装的时候,其中有一个pod一直是imagepullbackoff状态
后来发现是因为node没有做镜像仓库加速处理,所以镜像下载失败,导致pod状态一直是imagepullbackoff状态
配置完成后,Pod自动下载镜像,所有pod都running状态
查看node节点的images
至此kubernetes集群部署完毕
测试kubernetes
在集群中创建一个pod,对外暴露端口,验证是否正常访问
# 创建一个nginx的deployment kubectl create deployment nginx –image=nginx # 对外暴露端口 kubectl expose deployment nginx –port=80 –type=NodePort # 查看pod和svc kubectl get pod,svc
可以看到nginx的pod映射到宿主机端口为30830,安全组和防火墙开放的情况下尝试访问
部署dashboard # 下载dashboard编排文件 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml # 以该编排文件创建pod kubectl create -f recommended.yaml # 查看创建好的pod和svc kubectl get pod,svc -n kubernetes-dashboard
这里改了recommended.yaml里面,kubernetes-dashboard的端口类型为nodeport,并对外暴露30000
访问提示两种登录方式,这里用token登录
# 获取token kubectl describe secrets -n kubernetes-dashboard
复制token然后登录
提示没有权限,重新创建
# 创建sa,并绑定cluster-admin权限 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 # 将上面的编排文件保存为k8s-admin.yaml,然后创建 kubectl create -f k8s-admin.yaml
重新获取token,重新登录
kubectl describe secret -n kube-system
创建用户的时候,这里走进误区了,刚开始一直创建的是在kubernetes-dashboard的namespaces,其实这个namespaces下什么权限都没有,所以它创建的user的token是获取不到任何内容的
修改了yaml,重新创建sa之后,在kube-system中找到dashboard-admin用户的token,重新登录后,一切ok
Ubuntu是一个以桌面应用为主的Linux操作系统。它是一个开放源代码的自由软件,提供了一个健壮、功能丰富的计算环境,既适合家庭使用又适用于商业环境。Ubuntu将为全球数百个公司提供商业支持。 ...
查看全文Docker采取了一种保守的方法来清理未使用的对象(通常称为“垃圾收集”),例如图像,容器,卷和网络:除非您明确要求Docker这样做,否则通常不会删除这些对象。这可能会导致Docker使用额外的磁盘空...
查看全文新浪科技讯 北京时间5月27日晚间消息,据报道,四位知情人士今日透露,亚马逊、微软和谷歌这三大云计算服务提供商,正在竞争波音公司(Boeing)价值10亿美元的云服务合同。 这些...
查看全文新浪科技讯 北京时间5月27日晚间消息,据报道,多位知情人士今日称,继加州、纽约州和华盛顿州之后,马萨诸塞州和宾夕法尼亚州的总检察长也加入到对亚马逊的反垄断调查中。 如今,越来越...
查看全文
您好!请登录