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 update
3、设置 iptables 检查桥接流量,编辑 /etc/sysctl.conf 文件,在文件中添加如下内容:
net.bridge.bridge-nf-call-iptables = 1
4、禁用 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 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
初始化成功,会出现下图的日志:
如果中途有报错,进行了其他的设置后,需要执行 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 ,正常出现下图则部署成功:
总结
我按照上面的步骤可以顺利安装成功,但由于系统、环境、网络、版本的差异可能会出现问题,也不用担心,根据错误信息搜索就能够解决。
有问题不可怕,不断地去解决问题,我们的能力才能提升。
CentOS单机安装k8s并部署.NET 6程序相关推荐
- RKE安装k8s及部署高可用rancher
此博客,是根据 Rancher 官网文档,使用 RKE 测试部署最新发布版 Rancher v2.5.9 高可用集群的总结文档. 一 了解 Rancher Rancher 是为使用容器的公司打造的容器 ...
- centos losf 安装_Linux Centos7部署环境安装-CentOS
Linux Centos7部署环境安装-CentOS Centos7部署环境安装及Linux常用命令 centos系统下各文件夹的作用 centos7修改系统默认语言 centos7安装rz/sz命令 ...
- k8s学习一:centos7单机安装k8s
初始安装 yum install -y etcd kubernetes vim /etc/sysconfig/docker # 内容改为如下 OPTIONS='--selinux-enabled=fa ...
- 腾讯云服务器CentOS 7安装Tomcat并部署JSP站点统计进入站点人数
一.进入官网下载tomcat,http://tomcat.apache.org/ 二.使用rz命令上传下载的tomcat压缩包,并在XShell中解压 解压压缩包 tar -zxvf apache-t ...
- CentOS 单机安装Zookeeper-3.4.13
准备工作: zookeeper依赖JAVA环境运行,请先安装JDK,参考前面文章:https://blog.csdn.net/qq982782662/article/details/80745364 ...
- CentOS下安装QT5和编译第一个程序
QT5的安装 在安装QT5之前,首先要保证电脑里已经装了gcc和gcc-c++,只有gcc是不行的,因为QT5安装完成后会自动检测编译器,如果没有g++,它什么都不会检测到,它靠的编译器就是g++,可 ...
- Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务
前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用 ...
- linux slf4j.rpm,Centos下安装nginx rpm包
1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/centos/6 ...
- linux nginx rpm 安装配置,Centos下安装nginx rpm包
1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/en/download.html wget http://nginx.org/packages/centos/6 ...
最新文章
- 人人FED CSS编码规范
- 你真的会搜索?低效的你简直在浪费生命(三)(终结篇)
- 简单地使用线程之一:使用异步编程模型
- kafka 服务端消费者和生产者的配置
- java的基础类型和字节大小_java的基础类型和字节大小
- 聚类方法(Clustering)
- Android手机、电视(盒子) 打开ADB调试 一览表
- 思科认证入门级课程介绍(一)
- 瑞萨 smart Configurator
- 自定义android控件:快速检索QuickSearch
- jack 服务常见错误解决方法
- spring boot 整合 云之讯 demo
- 魔兽正式服哪个服务器稳定,魔兽正式服与怀旧服玩哪个更好玩?
- P1071 [NOIP2009 提高组] 潜伏者
- PAT-A-1062 Talent and Virtue 【排序】
- 资本赋能|灵途科技获数千万元融资,深化人工智能物联网布局
- Android除法运算,保留小数
- CCF CSP 201412-3 集合竞价 python
- 软件安全学习笔记(1):系统引导与控制权
- 【每周安全资讯】 2022 第 二 期
热门文章
- Server Develop (八) IOCP模型
- MySQL--3--mysqldump备份策略
- org.hibernate.InvalidMappingException: Could not parse mapping document from resource
- 城管威逼交警“让老百姓笑话”
- 智能云改-docker云迁移实战
- 浅谈ASP中Web页面间的数据传递
- Activity的呼叫转移*(3个Activity之间的跳转)
- js----与浏览列表有关的对象(浏览器对象)
- 应用系统日志采集解决方案
- 趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别