在VM CentOS 7.7上搭建单节点的Kubernetes(k8s)集群
·
一个适用于开发、测试等场景的单节点Kubernetes(k8s)环境
系统版本:
[root@testing ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
1、配置yum源:
添加kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.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.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum makecache
2、查看当前yum里的Kubernetes版本:
[root@testing ~]# yum info kubernetes
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
可安装的软件包
名称 :kubernetes
架构 :x86_64
版本 :1.5.2
发布 :0.7.git269f928.el7
大小 :36 k
源 :extras/7/x86_64
简介 : Container cluster management
网址 :k8s.io/kubernetes
协议 : ASL 2.0
描述 : Container cluster management
3、安装所需要的包:
[root@testing ~]# yum -y install kubernetes etcd
[root@testing ~]# kubectl --version
Kubernetes v1.5.2
查看进程
ps -ef|grep kube
4、配置文件的修改:
修改配置文件:
vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" #这里把127.0.0.1改成0.0.0.0
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,Security
ContextDeny,ResourceQuota"
#去掉ServiceAccount即可;
5、查看docker的版本:[上面命令并没有加入docker,但它却自动安装了]
[root@testing ~]# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@testing ~]# yum list installed|grep docker
5.1 配置镜像加速
发展之前用的镜像加速站点,不是关闭就是调整了范围,有的只能在自己的云产品上使用。注意:如果你目前无法拉取远程镜像,可能就是这个原因。
自2024年07月02日起,ACR对镜像加速功能的使用范围进行了调整:
● 仅限阿里云用户在具备公网访问的阿里云产品上使用该镜像加速能力。
● 仅支持通过镜像加速器拉取限定范围内的容器镜像。
vim /etc/docker/daemon.json
添加
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
OR 使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
6、 把服务添加到启动项,并启动服务:
for SERVICE in docker etcd kube-apiserver kube-controller-manager kube-scheduler kube-proxy kubelet; do
systemctl start $SERVICE
systemctl enable $SERVICE
done
7、验证安装成果:
7.1 创建服务和实例
命令行创建pod实例;
[root@testing ~]# kubectl run my-nginx --image=nginx --replicas=1 --port=80
deployment "my-nginx" created
命令行创建service
[root@testing ~]# kubectl expose deployment my-nginx --port=8888 --target-port=80 --external-ip=192.168.224.131
查看pod实例分配的Ip地址;
[root@testing ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
my-nginx-379829228-dvpd3 1/1 Running 0 13s 172.17.0.2 127.0.0.1
查看Kubetnetes里的service[简写svc],可以看到指定了外网IP地址:192.168.224.131
[root@testing ~]# kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 13m
my-nginx 10.254.149.50 192.168.224.131 8888/TCP 12s
查看nginx服务的状态:
[root@testing ~]# curl -I 192.168.224.131:8888
HTTP/1.1 200 OK
Server: nginx/1.17.4
Date: Fri, 18 Oct 2019 02:11:25 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 24 Sep 2019 14:49:10 GMT
Connection: keep-alive
ETag: "5d8a2ce6-264"
Accept-Ranges: bytes
7. 文件方式创建 (hello-service.yaml)
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
type: NodePort
ports:
- name: hello
port: 80
nodePort: 31002
targetPort: 80
protocol: TCP
selector:
app: hello
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-deployment
labels:
app: hello
spec:
replicas: 1
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
8、配置dashboard
这样单节点的Kubernetes就已经跑起来了,接下来就是安装kubernetes-dashboard
[root@testing ~]# docker pull docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1
kubernetes-dashboard.yaml文件如下:
[root@localhost ~]# cat kubernetes-dashboard.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: kubernetes-dashboard
template:
metadata:
labels:
app: kubernetes-dashboard
# Comment the following annotation if Dashboard must not be deployed on master
annotations:
scheduler.alpha.kubernetes.io/tolerations: |
[
{
"key": "dedicated",
"operator": "Equal",
"value": "master",
"effect": "NoSchedule"
}
]
spec:
containers:
- name: kubernetes-dashboard
image: siriuszg/kubernetes-dashboard-amd64:v1.5.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9090
protocol: TCP
args:
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.
- --apiserver-host=http://192.168.224.131:8080
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port: 80
targetPort: 9090
selector:
app: kubernetes-dashboard
创建实例:
kubectl create -f kubernetes-dashboard.yaml
查看是否成功运行:
[root@localhost ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default my-nginx-379829228-mpm5f 1/1 Running 0 59m
kube-system kubernetes-dashboard-3162153223-2s0qb 1/1 Running 0 40m
启动成功就可以打开网页看到效果啦:(输入http://192.168.224.131:8080/ui 即可跳转到如下地址)
9、常用命令
删除命令行创建的deploy、svc
kubectl delete deploy my-nginx
kubectl delete svc my-nginx
文件方式创建/删除deploy、svc
kubectl create -f hello-service.yaml
kubectl delete -f hello-service.yaml
查看
kubectl get pods -o wide
kubectl get svc
kubectl get svc,pod
kubectl get all
kubectl get all --all-namespaces
10、相关链接
更多推荐



所有评论(0)