opensuse 15.2 安装Kubernetes

简介

opensuse 15.2正式更新后对于开发者而言最大的兴趣应该就是Kubernetes 成为本次发行的官方收录套件,这将意味着在opensuse中安装Kubernetes 将变得非常简单,下面介绍安装过程。

安装前准备

系统准备

  • 准备一台或多台计算机或虚拟机
  • 安装opensuse请参考另一篇文章

禁用swap

> 禁用swap有两种方式,一种临时的,但重启电脑后将失效,一种永久禁用。 > > **虚拟机中禁用swap只能使用临时,暂未找到原因。**
  1. 不重启电脑,禁用启用swap,立刻生效

    # 禁用命令 sudo swapoff -a # 启用命令 sudo swapon -a # 查看交换分区的状态 sudo free -m
  2. 重新启动电脑,永久禁用swap

    # 把根目录文件系统设为可读写 sudo mount -n -o remount,rw / # 用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出 sudo vi /etc/fstab i #进入insert 插入模式 :wq #保存退出 # 重新启动电脑,使用free -m查看分区状态 sudo reboot sudo free -m

安装DOCKER

> opensuse官方源中已经收录了大部分开发需要使用的包,docker也在其中,可直接进行安装。
# 安装docker sudo zypper install docker # 配置自启 sudo systemctl enable docker # 启动docker sudo systemctl start docker # 验证是否启动成功 sudo docker ps

添加aliyundocker仓库加速器

# 编辑daemon.json sudo vi /etc/docker daemon.json # 将配置添加进 { "registry-mirrors": ["https://ovj8fg0z.mirror.aliyuncs.com"] } # 重启docker服务 sudo systemctl daemon-reload sudo systemctl restart docker

安装k8s

安装kubectl,kubelet,kubeadm

因opensuse 15.2官方源中已经添加了这些包,可直接进行安装。

# 安装 kubernetes-kubeadm 时将自动安装 kubernetes-kubelet 的依赖 sudo zypper install kubernetes-kubeadm kubernetes-client # 查看是否安装成功 kubeadm version kubectl version # 配置 kubelete 开机自启 sudo systemctl enable kubelet

初始化k8s

接下来将初始化k8s服务

sudo kubeadm init --kubernetes-version=1.18.0 \ --apiserver-advertise-address=192.168.100.142 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 \

由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址,很多新手初次部署都卡在此环节无法进行后续配置。

apiserver-advertise-address为mster主机ip,需要修改为自己的主机ip。

pod-network-cidr是自定义的pod的网段

如发生SystemVerification错误时可加上--ignore-preflight-errors=SystemVerification重新执行。

如果初始化失败了,自行百度解决,然后执行reset重新初始化:

kubeadm reset

进行初始化成功后返回如下信息:

..... ..... [addons] Applied essential addon: CoreDNS [addons] Applied essential addon: kube-proxy Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.122.21:6443 --token v2r5a4.veazy2xhzetpktfz \ --discovery-token-ca-cert-hash sha256:daded8514c8350f7c238204979039ff9884d5b595ca950ba8bbce80724fd65d4

记录生成的最后一部分内容,此内容在配置worker节点时需要用到。
根据提示配置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可以自动补充

[root@master01 ~]# source <(kubectl completion bash)

查看node 及pod 状态

[root@master01 ~]# kubectl get node NAME STATUS ROLES AGE VERSION master01.paas.com NotReady master 2m29s v1.18.0 [root@master01 ~]# kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-7ff77c879f-fsj9l 0/1 Pending 0 2m12s kube-system coredns-7ff77c879f-q5ll2 0/1 Pending 0 2m12s kube-system etcd-master01.paas.com 1/1 Running 0 2m22s kube-system kube-apiserver-master01.paas.com 1/1 Running 0 2m22s kube-system kube-controller-manager-master01.paas.com 1/1 Running 0 2m22s kube-system kube-proxy-th472 1/1 Running 0 2m12s kube-system kube-scheduler-master01.paas.com 1/1 Running 0 2m22s [root@master01 ~]#

节点未就绪,因为coredns pod没有启动, 缺少相关的网络插件。

添加网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果执行失败且错误为raw.githoursercontent.com无法访问,可浏览器访问下载或自行创建粘贴。

vi kube-flannel.yml kubectl appl -f kube-flannel.yml

也可配置其他网络插件,如: calicoweaveCNI bridge ...

设置master节点也可以运行Pod

kubernetes官方默认策略是worker节点运行Pod,master节点不运行Pod。如果只是为了开发或者其他目的而需要部署单节点集群,可以通过以下的命令设置:

kubectl taint nodes --all node-role.kubernetes.io/master-

安装Dashboard

安装Kubernetes-Dashboard

官方部署仪表板的服务没使用nodeport,将yaml文件下载到本地,在service里添加nodeport

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml

如果此方式无法下载可通过浏览器访问自行创建

# 编辑文件 vim recommended.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 nodePort: 30000 #新增 selector: k8s-app: kubernetes-dashboard # 部署Dashboard kubectl create -f recommended.yaml

创建完成后,检查相关服务运行状态

kubectl get deployment kubernetes-dashboard -n kube-system kubectl get pods -n kube-system -o wide kubectl get services -n kube-system netstat -ntlp|grep 30001

在浏览器中访问Dashboard

创建token

kubectl create serviceaccount dashboard-admin -n kube-system kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

配置Dashboard 用户名密码登录

  1. 创建用户名文件

    # 编辑 sudo vi /etc/kubernetes/pki/basic_auth_file # 增加内容 admin,admin,1
  2. 修改kube-apiserver.yaml文件

    # 编辑 sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml # 增加一行 ...... - --basic-auth-file=/etc/kubernetes/pki/basic_auth_file
  3. 创建集群角色权限绑定关系

    # 创建绑定关系 kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin # 检查绑定关系 kubectl get clusterrolebinding login-on-dashboard-with-cluster-admin
  4. 修改Dashboardrecommended.yml文件

    args: - --auto-generate-certificates - --namespace=kubernetes-dashboard - --token-ttl=21600 #新增行 单位秒 - --authentication-mode=basic #新增行
  5. 更新Dashboard

    kubectl apply -f recommended.yaml

等候Dashboard重启完毕,此时就可以用用户名密码进行登录了。

配置 Ingress-nginx

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.40.2/deploy/static/provider/cloud/deploy.yaml

遇到的问题

pod中无法访问外网

在node节点执行

cat /var/run/flannel/subnet.env iptables -t nat -I POSTROUTING -s 10.122.0.1/24 -j MASQUERADE

__EOF__

本文作者yg0070
本文链接https://www.cnblogs.com/yg0070/articles/13848084.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   yg0070  阅读(2226)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示