k8s 安装部署

一,准备3台机器,安装docker,kubelet、kubeadm、kubectl

firewall-cmd --state

使用下面命令改hostname的值:(改为k8s-master01)另外两台改为相应的名字。

172.188.32.43

hostnamectl set-hostname k8s-master01

172.188.32.44

hostnamectl set-hostname k8s-node01

172.188.32.40

hostnamectl set-hostname k8s-node02

部署k8s

关防火墙

systemctl stop firewalld # 临时

systemctl disable firewalld # 永久

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭

setenforce 0 # 临时关闭

关闭swap

swapoff -a # 临时

sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭

在master节点添加hosts

cat >> /etc/hosts << EOF

172.188.32.43 k8s-master01

172.188.32.44 k8s-node01

172.188.32.40 k8s-node02

EOF

将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf << EOF

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

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

EOF

生效

sysctl --system

时间同步

yum install ntpdate -y

ntpdate time.windows.com

1 安装docker &k8s

yum -y install gcc # 安装gcc

yum -y install gcc-c++ #安装gcc++

安装软件包

yum install -y yum-utils

yum-config-manager \

--add-repo \

https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装指定版本

yum install docker-ce-18.06.1.ce-3.el7 docker-ce-cli-18.06.1.ce-3.el7 containerd.io

启动docker

systemctl enable docker

systemctl start docker

查看版本

docker version

配置k8s软件源

cat > /etc/yum.repos.d/kubernetes.repo << EOF

kubernetes

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

安装kubelet、kubeadm、kubectl,同时指定版本 全部节点

yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4

设置开机启动

systemctl enable kubelet

安装kubelet、kubeadm、kubectl,同时指定版本 全部节点

yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4

设置开机启动

systemctl enable kubelet

部署Kubernetes Master(仅master节点 ):

kubeadm init --apiserver-advertise-address=172.188.32.43 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

如果出现[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused.的错误,如下图所示,原因是Docker是用yum安装的,docker的cgroup驱动程序默认设置为system。默认情况下Kubernetes cgroup为systemd,我们需要更改Docker cgroup驱动,解决方法如下:

出现错误:

解决方法

vi /etc/docker/daemon.json

修改为下面形式 node节点也要修改

{

"exec-opts": ["native.cgroupdriver=systemd"]

}

重启docker

systemctl restart docker

重新初始化

kubeadm reset # 先重置

kubeadm init --apiserver-advertise-address=172.188.32.43 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

在node节点运行下面代码,将node加入master:

kubeadm join 172.188.32.43:6443 --token 6ad1uz.zmr0o8dio0kirp7x \

--discovery-token-ca-cert-hash sha256:ae8196e0fec0b3fe3295210904d579076b5ebf12efe295984dba39d62c800857

如果出现上面的错误,说明token过期,重新生成token。或是因为master的防火墙没关。。。

kubeadm reset # 先重置

重新初始化

kubeadm reset # 先重置

kubeadm init --apiserver-advertise-address=172.188.32.43 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.22.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

关闭防火墙

root@localhost \~\]# setenforce 0 \[root@localhost \~\]# sed -i 's/\^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config \[root@localhost \~\]# systemctl disable firewalld --now # 使用kubectl工具 【master节点操作】 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 执行kubectl get node查看节点信息: 安装网络插件,否则 node 是 NotReady 状态(master节点跑) # 很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 如果出错 vi /etc/hosts # 编辑hosts 185.199.108.133 raw.githubusercontent.com # 加入 # 很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 如果上面的插件安装失败,可以选用 Weave,下面的命令二选一就可以了。 kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml kubectl apply -f http://static.corecore.cn/weave.v2.8.1.yaml # 更多其他网路插件查看下面介绍,自行网上找 yaml 安装 https://blog.csdn.net/ChaITSimpleLove/article/details/117809007 再重新下载。运行kubectl get nodes,查看运行的节点 查看状态 kubectl get pods -n kube-system ## 安装 k8s dashboard tips: 在master机器执行 # 部署 curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml -O kubectl apply -f recommended.yaml # 设置访问端口 \`type: ClusterIP\` 修改为 \`type: NodePort\` kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard # 查看服务端口 kubectl get svc -A \|grep kubernetes-dashboard **通过谷歌浏览器无法正常访问,然后换了个火狐浏览器正常访问** ### **创建账号** echo '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' \> user.yaml kubectl apply -f user.yaml 获取访问令牌 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}}" ### ******2**** ****测试kubernetes集群****** 在Kubernetes集群中创建一个pod,验证是否正常运行: # 下载nginx 【会联网拉取nginx镜像】 kubectl create deployment nginx --image=nginx # 查看状态 kubectl get pod 下面我们就需要将端口暴露出去,让其它外界能够访问 # 暴露端口 kubectl expose deployment nginx --port=80 --type=NodePort # 查看一下对外的端口 kubectl get pod,svc 如下图所示,记下PORT(S)下的**31660,在本机浏览器输入任意节点IP:31600。** 如图,出现下面页面,即为成功。如果访问不了,把防火墙关闭 [http://](http://192.168.69.44:32231/ "http://192.168.69.44:32231/")172.188.32[http://](http://192.168.69.44:32231/ "http://192.168.69.44:32231/")172.188.32[http://](http://192.168.69.44:32231/ "http://192.168.69.44:32231/")172.188.32.43[http://](http://192.168.69.44:32231/ "http://192.168.69.44:32231/") http://172.178.32.40:32231/ ## jar包 阿里云接口 (推送到阿里云镜像,不懂的可以私信) kubectl create deployment tea --image=registry.cn-hangzhou.aliyuncs.com/wmzhyf/work:v1 kubectl expose deployment tea --port=20018 --type=NodePort kubectl -n logs platform-help-96f5ffc9-q8fpd kubectl delete pods business kubectl delete deployment business kubectl delete svc business kubectl expose deployment business --port=20028 --type=NodePort kubectl get pods -o wide kubectl delete deployment business kubectl get pod,svc kubectl create deployment test --image=business kubectl expose deployment test--port=20019 --type=NodePort [http://](http://192.168.69.44:20018/time "http://192.168.69.44:30992/time")172.188.32[http://](http://192.168.69.44:20018/time "http://192.168.69.44:30992/time") http://172.188.32.40:++++30992++++/time #### ******查看pod详细信息****** kubectl -n describe pod platform-help-96f5ffc9-q8fpd #### ******查看pod日志****** kubectl -n logs platform-help-96f5ffc9-q8fpd kubectl create deployment java-demo --image=lizhenliang/java-demo --dry-run -o yaml kubectl expose deployment business --port=20018 --type=NodePort ## 附:kubectl 命令 基础命令 create 通过文件名或标准输入创建资源; expose 为Deployment,Pod创建Service; run 在集群中运行一个特定的镜像; set 在对象上设置特定的功能; explain 文档参考资料; get 显示一个或多个资源; edit 使用系统编辑器编辑一个资源; delete 通过文件名,标准输入,资源名称或标签选择器来删除资源 部署命令 rollout 管理Deployment,Daemonset资源的发布(例如状态、发布记录、回滚等); rolling-update 滚动升级,仅限ReplicationController; scale 对Deployment、ReplicaSet、RC或Job资源扩容或缩容Pod数量; autoscale 为Deploy,RS,RC配置自动伸缩规则(依赖metrics-server和hpa) 集群管理命令 certificate 修改证书资源; cluster-info 显示集群信息; top 查看资源利用率(依赖metrics-server); cordon 标记节点不可调度; uncordon 标记节点可调度; drain 驱逐节点上的应用,准备下线维护; taint 修改节点taint标记 ### ******create****** kubectl create deployment NAME --image=image -- \[COMMAND\] \[args...\] //格式 \[root@master \~\]# kubectl create deployment test1 --image busybox deployment.apps/test1 created //使用busybox镜像创建一个test1的pod \[root@master \~\]# kubectl get pod NAME READY STATUS RESTARTS AGE test1-78d64fd9b9-4ihbm 0/1 CrashLoopBackOff 3 114s //可以看到处于退出状态,因为busybox使用的是sh,没有任务就会退出 \[root@master \~\]# kubectl create deployment test2 --image busybox -- sleep 60 deployment.apps/test2 created \[root@master \~\]# kubectl get pod NAME READY STATUS RESTARTS AGE test2-7c95bf5bcb-wdf2 1/1 Running 0 17s //正在运行 \[root@master \~\]# kubectl create deployment web --image nginx --replicas 3 // 创建使用nginx镜像创建三个pod,名字为web deployment.apps/web created \[root@master \~\]# kubectl get pod web-96d5df5c8-2kqfx 1/1 Running 0 57s web-96d5df5c8-ld842 1/1 Running 0 57s web-96d5df5c8-vtwks 1/1 Running 0 57s \[root@master \~\]# kubectl get pods -o wide //查看pod运行的节点位置 web-96d5df5c8-2kqfx 1/1 Running 0 2m2s 10.244.2.3 node2.example.com \ \ web-96d5df5c8-ld842 1/1 Running 0 2m2s 10.244.1.6 node1.example.com \ \ web-96d5df5c8-vtwks 1/1 Running 0 2m2s 10.244.2.4 node2.example.com \ \ \[root@master \~\]# kubectl create deployment web01 --image nginx --port=80 //暴露80端口号 ### ******run****** // 启动一个 nginx pod \[root@master \~\]# kubectl run nginx --image nginx pod/nginx created \[root@master \~\]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 36s 10.244.1.7 node1.example.com \ \ \[root@master \~\]# kubectl delete pods nginx //删除nginx的pod pod "nginx" deleted \[root@master \~\]# kubectl run nginx --images nginx --port 80 // 暴露容器的80端口号 // 在容器中设置标签"app=nginx"和"env=prod" \[root@master \~\]# kubectl run nginx --image nginx --labels "app=nginx,env=prod" pod/nginx created \[root@master \~\]# kubectl describe pod nginx //描述nginx信息 // 测试运行 \[root@master \~\]# kubectl run nginx --image nginx --dry-run server //不会真正运行 W1219 01:41:21.786495 157488 helpers.go:553\] --dry-run is deprecated and can be replaced with --dry-run=client. pod/nginx created (dry run) ### **Delete** \[root@master \~\]# kubectl delete deployment test1 // 删除test1,使用deployment类型,因为我们当时创建的时候使用的是deployment类型 deployment.apps "test1" deleted \[root@master \~\]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-6799fc88d8-thr6q 1/1 Running 0 4h2m test2-7c95bf5bcb-tqgn5 0/1 Terminating 8 32m web-96d5df5c8-2kqfx 1/1 Running 0 30m web-96d5df5c8-ld842 1/1 Running 0 30m web-96d5df5c8-vtwks 1/1 Running 0 30m \[root@master \~\]# kubectl delete deployment test2 deployment.apps "test2" deleted \[root@master \~\]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-6799fc88d8-thr6q 1/1 Running 0 4h2m web-96d5df5c8-2kqfx 1/1 Running 0 31m web-96d5df5c8-ld842 1/1 Running 0 31m web-96d5df5c8-vtwks 1/1 Running 0 31m \[root@master \~\]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 \ 443/TCP 29h nginx NodePort 10.99.74.11 \ 80:31173/TCP 28h web ClusterIP 10.109.101.12 \ 8080/TCP 12m // 删除service类型的pod \[root@master \~\]# kubectl delete svc nginx 'service "nginx" deleted \[root@master \~\]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 \ 443/TCP 29h web ClusterIP 10.109.101.12 \ 8080/TCP 15m \[root@master \~\]# kubectl delete pods --all //删除所有pod \[root@master \~\]# kubectl delete pod foo --force //强制删除pod节点 附: ## **Docker 制作jar 包对应的镜像** **制作jar 镜像** #### 1.准备jar包和Dockerfile文件 ##### Dockerfile文件 命令1 # 拉取jdk8作为基础镜像 FROM java:8 # 作者 MAINTAINER wmzhyf \<[email protected]\> # 添加jar到镜像并命名为user.jar ADD iot-business.jar business.jar # 镜像启动后暴露的端口 EXPOSE 20018 # jar运行命令,参数使用逗号隔开 ENTRYPOINT \["java","-jar","business.jar"

Dockerfile文件 命令2

#环境

FROM openjdk:8

#作者信息

MAINTAINER wmzhyf <[email protected]>

#将本地文件挂载到容器

EXPOSE 10018 20018

#拷贝

COPY business.jar /business.jar

#执行命令

CMD ["sh", "-c", "java -jar /business.jar > /business.log 2>&1"]

2.准备镜像

然后使用docker命令打包:

docker build -t business .

user表示镜像名称

最后的.表示Dockerfile在当前目录

打包完成后使用docker images查看镜像

使用docker run命令创建并运行容器:

docker run -d --name user -p 8001:8001 business

docker run -d --name business -p 20018:20018 business

命令解释如下:

|------------|---------------------------|
| 命令 | 功能 |
| docker run | 创建并启动容器 |
| --name | 指定一个容器名称 |
| -d | 后台运行容器,并返回容器ID |
| -p | 指定端口 |
| user | 需要启动的镜像(名称+版本)不指定版本默认最新版本 |
| : | 符号左边为宿主机,右边为容器空间 |

docker logs -f -t business

jar日志启动成功,查看容器:

docker ps

我这里是openjdk8

创建并运行容器(直接基于jdk镜像创建容器):

docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app java:8 /usr/bin/java -jar /app/user.jar

docker run -d --name user -p 8001:8001 -v /opt/java_app_docker/app:/app openjdk:8 java -jar /app/user.jar

docker run -d --name business -p 20018:20018 -v /home/matrix/app:/app openjdk:8 java -jar /home/matrix/app/business.jar

相关推荐
人猿泰飞5 分钟前
在Ubuntu-22.04.5中安装ONLYOFFICE DocSpace(协作空间)【注意:安装失败,谨慎参考!】
java·linux·运维·python·ubuntu·项目管理·onlyoffice
CAE虚拟与现实6 分钟前
修改wsl中发行版Ubuntu的主机名
linux·运维·ubuntu·wsl·wsl2·修改主机名
开发小能手-roy9 分钟前
Ubuntu服务器性能调优指南:从基础工具到系统稳定性提升
linux·运维·服务器·ubuntu
潘yi.17 分钟前
Shell编程之正则表达式与文本处理器
linux·运维·正则表达式
破刺不会编程38 分钟前
什么是进程?
linux·运维·服务器
laimaxgg1 小时前
Docker Hub 创建私人镜像仓库
运维·服务器·docker·容器
CoolScript3 小时前
WSL2 配置和离线安装linux系统。
linux·运维·服务器
珹洺3 小时前
Linux红帽:RHCSA认证知识讲解(十 三)在serverb上破解root密码
linux·运维·服务器·网络·后端
越学不动啦4 小时前
八、自动化函数
运维·软件测试·自动化·dubbo·测试
Gold Steps.4 小时前
K8S运维实战之集群证书升级与容器运行时更换全记录
运维·容器·kubernetes