建立网站的软件,有赞微商城网页版,军事天地最新消息,老客网免费发布信息学习云原生#xff0c;k8s 是一个基础#xff0c;为了做一些实验#xff0c;单机部署是最方便的#xff0c;下面将介绍在 CentOS 中单机安装 k8s #xff0c;并将一个 .NET 6 的程序发布到 k8s 中。环境宿主机#xff1a;Mac 10.15.7CentOS版本#xff1a;7.6内存#… 学习云原生k8s 是一个基础为了做一些实验单机部署是最方便的下面将介绍在 CentOS 中单机安装 k8s 并将一个 .NET 6 的程序发布到 k8s 中。环境宿主机Mac 10.15.7CentOS版本7.6内存4gbcpu2核docker20.10.12k8s1.23.4准备1、创建一个 CentOS 虚拟机配置如下版本7.6cpu2核内存4gb2、执行下面命令更新 yum 源yum update3、设置 iptables 检查桥接流量编辑 /etc/sysctl.conf 文件在文件中添加如下内容net.bridge.bridge-nf-call-iptables 14、禁用 swapswapoff -a修改 /etc/fstab 文件将下图红框部分注释安装1、安装 dockersudo 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]
nameKubernetes
baseurlhttp://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled1
gpgcheck0
repo_gpgcheck0
gpgkeyhttp://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg3、安装 kubelet、kubeadm 和 kubectlyum 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.6k8s.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.66、设置 cgroup 在 /etc/docker/ 目录下添加 daemon.json 文件内容如下{exec-opts: [native.cgroupdriversystemd]
}执行下面命令让配置生效systemctl daemon-reload
systemctl restart docker7、执行下面命令开放端口如果还是碰到各种端口不能访问的问题测试环境可以关闭防火墙# 6443 Kubernetes API服务器 所有组件
firewall-cmd --zonepublic --add-port6443/tcp --permanent firewall-cmd --reload
# 10250 Kubelet APT Kubelet自身控制平面组件
firewall-cmd --zonepublic --add-port10250/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 --restartalways registry6、编辑 /etc/docker/daemon.json 文件添加下面内容{exec-opts: [native.cgroupdriversystemd],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 ,正常出现下图则部署成功总结我按照上面的步骤可以顺利安装成功但由于系统、环境、网络、版本的差异可能会出现问题也不用担心根据错误信息搜索就能够解决。有问题不可怕不断地去解决问题我们的能力才能提升。