CentOS单机安装k8s并部署.NET 6程序

ec966eed65725c32cfabe97f623faa22.png

学习云原生,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 update

3、设置 iptables 检查桥接流量,编辑  /etc/sysctl.conf 文件,在文件中添加如下内容:

net.bridge.bridge-nf-call-iptables = 1

4、禁用 swap:

swapoff -a

修改 /etc/fstab 文件,将下图红框部分注释:

47b6112564d92de69d7c816d601bc828.png

安装

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 on

2、在 /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.gpg

3、安装 kubelet、kubeadm 和 kubectl:

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet  && systemctl start kubelet

4、在 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 docker

7、执行下面命令开放端口,如果还是碰到各种端口不能访问的问题,测试环境可以关闭防火墙:

# 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 --reload

8、执行下面命令初始化 k8s :

kubeadm init

初始化成功,会出现下图的日志:

6aaa7dcaabbde54f0635e5feadff907b.png

如果中途有报错,进行了其他的设置后,需要执行 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/config

3、因为是单机版,需要让 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-https

2、进入 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 registry

6、编辑 /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 docker

7、将构建的镜像推送到私有仓库:

docker tag k8s-netcore-demo 10.211.55.10:8888/k8s-netcore-demo
docker push 10.211.55.10:8888/k8s-netcore-demo

8、在 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-netcore

10、执行 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           8h

12、查看访问端口:

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   8h

13、访问 http://10.211.55.10:32230 ,正常出现下图则部署成功:

095cbd739dfd15ee7537fa2be748dc00.png

总结

我按照上面的步骤可以顺利安装成功,但由于系统、环境、网络、版本的差异可能会出现问题,也不用担心,根据错误信息搜索就能够解决。

有问题不可怕,不断地去解决问题,我们的能力才能提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php session缓存,扫盲:php session缓存至memcached中的方法

memcached是一套分布式的快取系统&#xff0c;当初是DangaInteractive为了LiveJournal所发展的&#xff0c;但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件&#xff0c;以BSDlicens更改为&#xff1a;session.save_handler memcachesession.save_path"tcp://12…

MASA Framework - DDD设计(2)

Clean Architecture国内对于Clean Architecture的翻译很多&#xff0c;干净/整洁/清晰。但无论哪一种都说明了它简洁、清晰的特性。早期它长这样看到这张图的同学可能会对另外一张图有印象洋葱架构(Onion)现在长这样看起来好像是亲戚&#xff0c;它们的确也有着千丝万缕的关系分…

SpringMVC核心分发器DispatcherServlet分析[附带源码分析]

目录 前言DispatcherServlet初始化过程DispatcherServlet处理请求过程总结参考资料前言 SpringMVC是目前主流的Web MVC框架之一。 如果有同学对它不熟悉&#xff0c;那么请参考它的入门blog&#xff1a;http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 本…

WPF 展示视频修改为WriteableBitmap

WPF开发者QQ群&#xff1a;340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS&#xff1a;有更好的方式欢迎推荐。接着上一篇&#xff0c;进行WriteableBitmap性能优化修改后运行对比如下&#xff1a;前&#xff08;C…

linux之类似Windows的资源管理器gnome-system-monitor(可用这个杀死进程)

1、使用 直接运行下面命令gnome-system-monitor 如果没有安装用下面命令安装sudo apt-get install gnome-system-monitor 2、结果 可以点击右键然后杀死相关进程&#xff0c;这也是杀死进程的办法。

HttpClient异常处理手册

HttpClient异常处理手册 开源中国 发表于 2014-08-26 19:44:06异常处理 HttpClient的使用者在执行HTPP方法&#xff08;GET,PUT,DELETE等&#xff09;&#xff0c;可能遇到会两种主要类型的异常&#xff1a; 传输异常协议异常并不是所有的异常都会传播给HttpClient的用户。Htt…

再读《精通css》02:选择器

2019独角兽企业重金招聘Python工程师标准>>> 1.2 为样式找到目标1、类型选择器用来选择特定类型的原素。比如p&#xff0c;a&#xff0c;h1等等。也叫元素选择器或简单选择器。2、后代选择器用来寻找特定元素或元素组的后代。后代选择器由两个选择器之间的空格表示。…

余弦欧式距离matlab,余弦相似度和欧几里得距离

1.余弦相似度同过两个向量的夹角的余弦值来判断两个向量的相似度。余弦值取值[-1,1],越接近1&#xff0c;两向量夹角越小&#xff0c;越相似。图片.png二维公式&#xff1a;图片.pngn维公式&#xff1a;图片.png存在的问题[1]&#xff1a;余弦相似度更多的是从方向上区分差异&a…

App Store 排名获取。

为什么80%的码农都做不了架构师&#xff1f;>>> https://affiliate.itunes.apple.com/resources/documentation/genre-mapping/ app榜示例 &#xff0c; 取中国免费榜前10条&#xff1a; 首先访问 https://itunes.apple.com/WebObjects/MZStoreServices.woa…

使用 Playwright 对 ASP.NET Core 应用执行功能测试

前言在前面的文章中&#xff0c;我们已经介绍过 Playwright for .NET&#xff0c;它常用于自动化测试已经部署好的 Web 应用。其实&#xff0c;开发人员也可以使用它在 ASP.NET Core 应用程序中进行功能测试。功能测试功能测试是从用户角度编写&#xff0c;用于基于其要求验证系…

PHP自动查找指定文件夹下所有文件BOM和删除所有文件

2019独角兽企业重金招聘Python工程师标准>>> <?php if (isset($_GET[dir])){ //设置文件目录 $basedir$_GET[dir]; }else{ $basedir .; } $auto 1; checkdir($basedir); function checkdir($basedir){ if ($dh opendir(…

php支持cs吗,关于composer、phpmd和phpcs于windows中的安装与使用方法

Composer项目地址 https://getcomposer.org中文 http://docs.phpcomposer.com/Composer是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库&#xff0c;它会在你的项目中为你安装他们。一、安装Composer官网有详细介绍安装方法&#xff0c;包括windows和linux系统。以…

基于ASP.NET Core api 的服务器事件发送

现如今程序员对Web API的调用已经是轻车熟路。但是传统的api调用都是拉模式&#xff0c;也就是主动发起请求去调用一个api.但是程序员往往对另一种很有用的模式很陌生&#xff0c;即推模式。拉模式 - 主动调用并获取结果的模式。推模式 - 订阅并接受数据推送的模式。今天要介绍…

Android之解决java.lang.NoSuchMethodError:android.os.powerManager.isInteractive问题

1、问题 再三星平板(Android 4.2.2系统)我们代码powerManager调用了函数isInteractive方法,出现下面错误 java.lang.NoSuchMethodError:android.os.powerManager.isInteractive 2、解决办法 1、一开始想用try catch来解决,肯定不行,功能没实现,而且进程还是会挂 2…

DDD为何叫好不叫座?兼论DCI与业务分析的方法论

今天&#xff0c;仔细阅读了园子里面的一个朋友写的《一缕阳光&#xff1a;DDD&#xff08;领域驱动设计&#xff09;应对具体业务场景&#xff0c;如何聚焦 Domain Model&#xff08;领域模型&#xff09;&#xff1f;》(http://www.cnblogs.com/xishuai/p/3800656.html)这篇博…

php 实现的字典序排列算法,字典序的一个生成算法

字典序的一个生成算法。最近在LeetCode刷题&#xff0c;刷到一个题&#xff0c;链接&#xff1a;https://leetcode-cn.com/problems/permutation-sequence/这个题要求得长度为n的字典序列的第k个排列。我们知道&#xff0c;字典序列是一个长度为n(n>1)&#xff0c;元素为1~n…

BeetleX服务网关流量控制

为了保障后台服务应用更可靠地运行&#xff0c;网关提供了一些基础流量控制功能&#xff1b;通过这一功能可以限制流转到后台应用服务的处理量&#xff0c;从而让服务在可应对的并发范围内更可靠地运作。服务网关提供了流量控制有基础控制、IP、域名和请求路径。基础配置主要包…

【cocos2d-x】2.0升级为3.0一些常见变化纪录

1.去CC之前2.0的CC**,把CC都去掉&#xff0c;基本的元素都是保留的2.0CCSprite CCCallFunc CCNode ..3.0Sprite CallFunc Node ..2.cc***结构体改变2.0 ccp(x,y) ccpAdd(p1,p2)ccpSubccpMultccpLength(p)ccpDot(p1,p2);ccc3()ccc4()ccWHITECCPointZeroCCSizeZer…

Java Web开发——Servlet监听器

一、Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类&#xff0c;用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件&#xff0c;以及监听这些域对象中属性发生修改的事件。 监听对象&#xff1a; 1、ServletContext&#xff1…

通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式...

目录&#xff1a;一、通过Dapr实现一个简单的基于.net的微服务电商系统二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解三、通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr四、通过Dapr实现一个简单的基于.net的微服…