CentOS单机安装k8s并部署.NET 6程序
學習云原生,k8s 是一個基礎,為了做一些實驗,單機部署是最方便的,下面將介紹在 CentOS 中單機安裝 k8s ,并將一個 .NET 6 的程序發布到 k8s 中。
環境
宿主機:Mac 10.15.7
CentOS
版本:7.6
內存:4gb
cpu:2核
docker:20.10.12
k8s:1.23.4
準備
1、創建一個 CentOS 虛擬機,配置如下:
版本:7.6
cpu:2核
內存:4gb
2、執行下面命令更新 yum 源:
yum?update3、設置 iptables 檢查橋接流量,編輯 ?/etc/sysctl.conf 文件,在文件中添加如下內容:
net.bridge.bridge-nf-call-iptables?=?14、禁用 swap:
swapoff?-a修改 /etc/fstab 文件,將下圖紅框部分注釋:
安裝
1、安裝 docker:
sudo?yum?install?-y?yum-utils?device-mapper-persistent-data?lvm2sudo?yum-config-manager?--add-repo?https://download.docker.com/linux/centos/docker-ce.reposudo?yum-config-manager?--add-repo?http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo?yum-config-manager?--enable?docker-ce-edgesudo?yum?install?docker-cesystemctl?start?docker chkconfig?docker?on2、在 /etc/yum.repos.d 下創建 k8s.repo, 并添加如下內容:
[kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg3、安裝 kubelet、kubeadm 和 kubectl:
yum?install?-y?kubelet?kubeadm?kubectl systemctl?enable?kubelet??&&?systemctl?start?kubelet4、在 root 目錄下創建文件 k8s-images.sh ,內容如下:
for?i?in?`kubeadm?config?images?list`;?do?imageName=${i#k8s.gcr.io/}docker?pull?registry.aliyuncs.com/google_containers/$imageNamedocker?tag?registry.aliyuncs.com/google_containers/$imageName?k8s.gcr.io/$imageNamedocker?rmi?registry.aliyuncs.com/google_containers/$imageName done;5、執行 sh k8s-images.sh 命令來進行相關鏡像的拉取,但最后會報一個錯,coredns 鏡像拉取失敗,如果是科學上網就不存在問題,錯誤信息如下:
Error response from daemon: pull access denied for registry.aliyuncs.com/google_containers/k8s.gcr.io/coredns/coredns, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
可以手動拉取鏡像來進行處理,依次執行下面命令:
docker?pull?coredns/coredns docker?tag?coredns/coredns:latest?k8s.gcr.io/coredns/coredns:v1.8.6 docker?rmi?coredns/coredns:latest為什么上面 tag 的時候用的是 1.8.6 的版本,可以先執行 kubeadm config images list查看下鏡像的版本,我這里執行后的鏡像列表如下,而 coredns 就是 1.8.6:
k8s.gcr.io/kube-apiserver:v1.23.4 k8s.gcr.io/kube-controller-manager:v1.23.4 k8s.gcr.io/kube-scheduler:v1.23.4 k8s.gcr.io/kube-proxy:v1.23.4 k8s.gcr.io/pause:3.6 k8s.gcr.io/etcd:3.5.1-0 k8s.gcr.io/coredns/coredns:v1.8.6
6、設置 cgroup ,在 /etc/docker/ 目錄下添加 daemon.json 文件,內容如下:
{"exec-opts":?["native.cgroupdriver=systemd"] }執行下面命令讓配置生效:
systemctl?daemon-reload systemctl?restart?docker7、執行下面命令開放端口,如果還是碰到各種端口不能訪問的問題,測試環境可以關閉防火墻:
#?6443?Kubernetes?API服務器?所有組件 firewall-cmd?--zone=public?--add-port=6443/tcp?--permanent?&&?firewall-cmd?--reload #?10250?Kubelet?APT?Kubelet自身,控制平面組件 firewall-cmd?--zone=public?--add-port=10250/tcp?--permanent?&&?firewall-cmd?--reload8、執行下面命令初始化 k8s :
kubeadm?init初始化成功,會出現下圖的日志:
如果中途有報錯,進行了其他的設置后,需要執行 kubeadm reset 后再執行 kubeadm init 。
安裝后的配置
1、根據上圖的提示進行配置,依次執行下面命令:
mkdir?-p?$HOME/.kube sudo?cp?-i?/etc/kubernetes/admin.conf?$HOME/.kube/config sudo?chown?$(id?-u):$(id?-g)?$HOME/.kube/config3、因為是單機版,需要讓 master 節點參與工作:
kubectl?taint?nodes?--all?node-role.kubernetes.io/master-3、 安裝網絡插件:
kubectl?apply?-f?"https://cloud.weave.works/k8s/net?k8s-version=$(kubectl?version?|?base64?|?tr?-d?'\n')"4、執行 kubectl get nodes ,如果 status 為 Ready ,說明安裝配置完成,master 節點注冊到了 k8s 中。
NAME ? ? ? ? ? ? ?STATUS ? ROLES ? ? ? ? ? ? ? ? ?AGE ? ? VERSION k8s-single-temp ? Ready ? ?control-plane,master ? 5m58s ? v1.23.4
部署 .NET 6 程序
1、在命令行執行命令創建一個名為k8s-netcore-demo的項目:
dotnet?new?webApp?-o?k8s-netcore-demo?--no-https2、進入 k8s-netcore-demo 目錄執行 dotnet publish ,將發布后的 publish 目錄復制到上面的 CentOS 的 root 目錄中。
3、進入 publish 目錄,創建 Dockerfile 文件,內容如下:
FROM?mcr.microsoft.com/dotnet/aspnet:6.0 COPY?.?/app WORKDIR?/app EXPOSE?80/tcp ENTRYPOINT?["dotnet",?"k8s-netcore-demo.dll"]4、在 publish 目錄下執行下面命令,將程序構建成鏡像:
docker?build?-t?k8s-netcore-demo?.5、搭建私有倉庫:
docker?pull?registry docker?run?-d?-p?8888:5000?--restart=always?registry6、編輯 /etc/docker/daemon.json 文件,添加下面內容:
{"exec-opts":?["native.cgroupdriver=systemd"],"insecure-registries":["10.211.55.10:8888"]?#?新加的內容,IP?為宿主機的?IP }執行下面命令重啟生效:
sudo?systemctl?daemon-reload sudo?systemctl?restart?docker7、將構建的鏡像推送到私有倉庫:
docker?tag?k8s-netcore-demo?10.211.55.10:8888/k8s-netcore-demo docker?push?10.211.55.10:8888/k8s-netcore-demo8、在 root 目錄下創建文件 deploy.yaml 文件,內容如下:
apiVersion:?apps/v1 kind:?Deployment metadata:name:?k8s-netcore-demonamespace:?k8s-netcorelabels:k8s-app:?k8s-netcore-demo spec:replicas:?2selector:matchLabels:k8s-app:?k8s-netcore-demotemplate:metadata:labels:k8s-app:?k8s-netcore-demospec:containers:-?name:?k8s-netcore-demoimage:?10.211.55.10:8888/k8s-netcore-demoports:-?containerPort:?80 --- #?-------------------?Service?-------------------?# kind:?Service apiVersion:?v1 metadata:labels:k8s-app:?k8s-netcore-demoname:?k8s-netcore-demonamespace:?k8s-netcore spec:type:?NodePortports:-?port:?80targetPort:?80selector:k8s-app:?k8s-netcore-demo所有配置為 k8s-netcore-demo 的地方是構建的鏡像的名稱;
image 的值為 10.211.55.10:8888/k8s-netcore-demo,這個是鏡像發布到私有倉庫中的地址;
namespace 的值配置為創建的 namespace 的名稱。
9、在 k8s 中創建 namespace :
kubectl?create?namespace?k8s-netcore10、執行 deploy.yaml 文件:
kubectl?create?-f?deploy.yaml?--validate #加上?--validate?參數,當yaml文件有錯誤時,會給出提示11、使用 kubectl get 命令查看創建情況:
kubectl?get?deploy?-n?k8s-netcore #?結果如下: NAME???????????????READY???UP-TO-DATE???AVAILABLE???AGE k8s-netcore-demo???2/2?????2????????????2???????????8h12、查看訪問端口:
kubectl?get?svc?-n?k8s-netcore #?結果如下: NAME???????????????TYPE???????CLUSTER-IP??????EXTERNAL-IP???PORT(S)????????AGE k8s-netcore-demo???NodePort???10.106.23.177???<none>????????80:32230/TCP???8h13、訪問 http://10.211.55.10:32230 ,正常出現下圖則部署成功:
總結
我按照上面的步驟可以順利安裝成功,但由于系統、環境、網絡、版本的差異可能會出現問題,也不用擔心,根據錯誤信息搜索就能夠解決。
有問題不可怕,不斷地去解決問題,我們的能力才能提升。
總結
以上是生活随笔為你收集整理的CentOS单机安装k8s并部署.NET 6程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 11 中的参数 null 检查
- 下一篇: WPF 展示视频修改为Writeable