一个适用于开发、测试等场景的单节点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、相关链接

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐