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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM