简介
opensuse 15.2正式更新后对于开发者而言最大的兴趣应该就是
Kubernetes
成为本次发行的官方收录套件,这将意味着在opensuse
中安装Kubernetes
将变得非常简单,下面介绍安装过程。
安装前准备
系统准备
- 准备一台或多台计算机或虚拟机
- 安装
opensuse
请参考另一篇文章
禁用swap
> 禁用swap有两种方式,一种临时的,但重启电脑后将失效,一种永久禁用。
>
> **虚拟机中禁用swap只能使用临时,暂未找到原因。**
-
不重启电脑,禁用启用
swap
,立刻生效# 禁用命令 sudo swapoff -a # 启用命令 sudo swapon -a # 查看交换分区的状态 sudo free -m
-
重新启动电脑,永久禁用
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
也可配置其他网络插件,如: calico, weave , CNI 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 用户名密码登录
-
创建用户名文件
# 编辑 sudo vi /etc/kubernetes/pki/basic_auth_file # 增加内容 admin,admin,1
-
修改
kube-apiserver.yaml
文件# 编辑 sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml # 增加一行 ...... - --basic-auth-file=/etc/kubernetes/pki/basic_auth_file
-
创建集群角色权限绑定关系
# 创建绑定关系 kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin # 检查绑定关系 kubectl get clusterrolebinding login-on-dashboard-with-cluster-admin
-
修改
Dashboard
的recommended.yml
文件args: - --auto-generate-certificates - --namespace=kubernetes-dashboard - --token-ttl=21600 #新增行 单位秒 - --authentication-mode=basic #新增行
-
更新
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