新手Ubuntu部署k8s,docker,openwhisk及一些坑
使用华为云购买了三台ECS服务器(本文用的是4核4G内存,ubuntn)部署docker,k8s,openwhisk。
·
这里写自定义目录标题
新手Ubuntu部署k8s,docker及一些坑
踩坑
- 报错:CRI v1 runtime API is not implemented for endpoint “unix:///var/run/cri-dockerd.sock”: rpc error: code =
Unimplemented desc = unknown service runtime.v1.RuntimeService"
解决:k8s与docker的版本最好不要直接用最新版本,较新版本需要额外安装,新版本配置时需要额外安装cri-docker或者container,初次尝试发现报错,改bug直接放弃了。 - 报错:[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory
“/etc/kubernetes/manifests”. This can take up to 4m0s
解决:使用我这里报了两种错,一种是curl+一个链接,出现超时,这是最开始尝试使用单机部署k8s单个节点,因此在本机虚拟机上进行配置master,后来添加了两个云服务器作为work节点,这种一台主机两台云服务器的一定要注意,主机使用的是内网ip,云服务器弹性公网ip无法直接与主机通信,改成三台云服务器解决。
之后又出现此错误,查看日志为"Error getting node" err="node “ecs-0001” not found"报错,找不到node。研究发现init配置文件时,ip地址应该写成服务器的内网ip,若写成公网ip,就无法找到,报错。
超时直接ctrl+c退出就行,不用一直等着,然后查看journalctl -xeu kubelet报错日志。 - 报错:进行挂载,配置pvc时,pvc一直处于pending状态。
解决:查询说时selfLink的原因,在/etc/kubernetes/manifests/kube-apiserver.yaml添加可以解决,但是之后发现kube-apiserver貌似无法running了,于是采用更换下文中deployment.yaml中的image镜像,改为registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0成功解决。
4. 报错:wsk:command not found
解决:说明没有安装wsk,通过阅读openwhisk参考文档得知从https://github.com/apache/openwhisk-cli下载。配置过程貌似要下载go,照着文档下载就行。
5. 报错:openwhisk安装过程中,pod中gen-cert error,nginx 一直init。
解决:莫名其妙的错误,进入pod的gen-cert中,发现报错,kubectl command not found,查看此部分代码,只有下面几行,查询说为node节点添加kubectl执行命令,并在kubectl前添加路径,均不行。这个文件用于nginx-secret的生成,后面干脆直接把这个文件代码全删了,直接执行下面两行。
#openwhisk-deploy-kube/ helm / openwhisk / configMapFiles / genCerts / gencerts.sh
if kubectl get secret $NGINX_CERT_SECRET; then
echo "using existing $NGINX_CERT_SECRET secret"
else
echo "generating new $NGINX_CERT_SECRET secret"
genssl.sh "*.$WHISK_API_HOST_NAME" server /cert-gen
kubectl create secret tls $NGINX_CERT_SECRET --cert=/cert-gen/openwhisk-server-cert.pem --key=/cert-gen/openwhisk-server-key.pem
fi
----------------
#会生成sever.crt和server.key两个文件,genssl找不到的话,我用的这个https://github.com/caronc/genssl.git
genssl.sh -s "*.<ip地址>" server /cert-gen
#创建密钥,成功配置nginx run,配置完成
kubectl create -n openwhisk secret tls owdev-nginx --cert=server.crt --key=server.key
代码
使用华为云购买了三台ECS服务器(本文用的是4核4G内存,ubuntn)。
// 安装docker和k8s,每台主机都需要
//docker 23.0.3;k8s:1.22.4
#禁用selinux
sudo apt-get update
apt install policycoreutils
# 检查selinux状态,华为云貌似默认为disabled
sestatus
#禁用缓冲区,这里华为云貌似也不用
swapoff -a
vim /etc/sysctl.conf
#取消注释
net.ipv4.ip_forward=1
#安装kubelet
sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet=1.22.4-00 kubeadm=1.22.4-00 kubectl=1.22.4-00
systemctl enable kubelet
systemctl start kubelet
#查看安装是否成功
systemctl status kubelet
#安装docker
apt-get install ca-certificates curl gnupg lsb-release
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#若报错缺少key,使用下一句,
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7EA0A9C3F273FCD8
#安装docker
sudo apt-get install docker-ce=5:23.0.3-1~ubuntu.22.04~jammy docker-ce-cli=5:23.0.3-1~ubuntu.22.04~jammy containerd.io
#查看docker-ce版本,若上步报错,可以查版本
apt-cache madison docker-ce
systemctl enable docker
systemctl start docker
#查看docker是否安装成功
systemctl status docker
#设置镜像源
cat <<EOF > daemon.json
{
"registry-mirrors": ["https://mltfzuzk.mirror.aliyuncs.com"],
"dns": ["8.8.8.8","8.8.4.4"]
}
EOF
mv daemon.json /etc/docker/daemon.json
# 重新加载
systemctl daemon-reload
# 重启Docker服务,若重启失败,则检查文件配置问题
systemctl restart docker
//配置master节点,master主机需要
#1.使用配置文件方式
#执行获取配置文件,并复制
kubeadm config print init-defaults
#新建个文件,将上面配置文件贴进去
vim kubeadm-config.yaml
------------
localAPIEndpoint下的advertiseAddress:改成内网ip(华为云服务器的内网IP)
nodeRegistration下的name:改成主机名
#配置源,原本的源在国外,很慢
imageRepository:改为registry.aliyuncs.com/google_containers
#networking加podsunet,不然之后配置flannel会出问题
networking:里面多加一句podSubnet: 10.244.0.0/16
------------
#修改完后开始init
kubeadm init --config=kubeadm-config.yaml
#2.直接init
kubeadm init --apiserver-advertise-address=<内网ip> --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.22.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --v=5
#运行完毕后,会提示复制授权文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
//其他主机执行加入语句,加入master节点,本文只有这句话不在master节点执行
(直接执行)kubeadm join --token ····
#查看节点
kubectl get nodes
#配置失败后,每次配置都要reset一下,不然会显示端口已占用,或者文件已经存在
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset
#配置flannel网络,若长时间不执行,可以vim kube-flannel.yml,把下面链接内容复制进去,替换命令即可
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#配置完成后执行,所有节点均ready,所有pod都run
kubectl get nodes
kubectl get pod -A
#配置可视化dashboard,同样卡住可以复制,同样pod都run配置完成
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
#设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
将type: ClusterIP 改为 type: NodePort
#可以看到端口号,NodePort的第二个端口,网站访问ip:端口即可进入可视化界面,记得开放端口
kubectl get svc -A |grep kubernetes-dashboard
#创建账号
vim dash.yaml
----------------
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
---------------
#执行获取token,主机名之前的全部复制,为token
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
#配置openwhisk
#安装helm,并添加镜像
sudo snap install helm --classic
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
#创建文件夹,进行挂载,跳转到 https://zhuanlan.zhihu.com/p/269388017文章
#3.2.2 配置 Dynamic Storage Provisioning按步骤来,进行配置。后来发现,貌似可以不进行这一步。
#安装openwhisk
git clone https://github.com/apache/openwhisk-deploy-kube.git
cd openwhisk-deploy-kube
#创建配置文件,若是没有进行挂载,直接用下方的,我怀疑可行,具体没试过
vim mycluster.yaml
-----------
whisk:
ingress:
type: NodePort
apiHostName: <内网IP>
apiHostPort: 31001
nginx:
httpsNodePort: 31001
k8s:
persistence:
enabled: false # 禁用持久化存储
------------
#执行,由于github国内下载慢的原因,需要将下面两个文件中github链接换成gitee,去gitee上查一下即可,上面4处替换,下面1处
#openwhisk-deploy-kube/ helm / openwhisk / configMapFiles / installPackages / myTask.sh
#openwhisk-deploy-kube/ helm / openwhisk / configMapFiles / initCouchDB / initdb.sh
helm install owdev ./helm/openwhisk -n openwhisk --create-namespace -f mycluster.yaml
wsk property set --apihost <内网IP>:31001
#直接复制
wsk property set --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
#查看是否全部配置好
kubectl get pods -n openwhisk
#卸载语句
helm uninstall owdev -n openwhisk
更多推荐
已为社区贡献1条内容
所有评论(0)