才接触 kubernetes 的时候觉得太复杂了,但是反反复复装了好多遍之后发现其实也就那么回事。希望下面的内容能够帮助大家尽早度过入门时的阵痛期。
环境准备
centos 7.2(本文所有步骤都在 疼讯云 进行了验证)
安装
0.切换 yum 源 (可选)
# 没有 wget 的话需要# yum install -y wgetwget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum makecache
1. 安装 kubernetes
yum install -y etc kubernetes
2. 修改配置
Docker配置文件 /etc/sysconfig/docker,其中的OPTIONS的内容设置为:
$ vim /etc/sysconfig/docker OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'
Kubernetes apiserver的配置文件 /etc/kubernetes/apiserver,有如下:
$ vim /etc/kubernetes/apiserver KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
去掉 ServiceAccount 选项
3. 启动服务
systemctl start etcsystemctl start dockersystemctl start kube-apiserver.servicesystemctl start kube-controller-manager.servicesystemctl start kube-scheduler.servicesystemctl start kubelet.servicesystemctl start kube-proxy.service
检查 kubernetes 是否启动:
ps -ef | grep kube
简单例子
创建 pod
创建 httpd-dev.yaml 文件,并写入 以下 内容:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: http spec: replicas: 3 template: metadata: labels: run: http spec: containers: - name: http image: http ports: - containerPort: 80
执行以下命令,启动 pod:
kubectl apply -f httpd-dev.yaml kubectl get pod -o wide
可以看到:
kubectl get pod -o wide
我们启动了 3 个 pod 来运行 htppd 镜像。并为这 3 个 pod 分配了 ip,可以再 k8s 中的容器和节点进行访问,如下图:
curl
创建服务
新建 httpd-svc.yml,并写入以下内容:
apiVersion: v1 kind: Service metadata: name: httpd-svc spec: selector: run: http ports: - protocol: TCP port: 8888 targetPort: 80
创建 service:
kubectl apply -f httpd-svc.yaml
查看 service:
kubectl get service
kubectl get service
可以看见 httpd-svc 分配到了一个 cluster-ip,我们可以通过这个ip进行访问:
curl 10.254.114.93:8888
curl service
可以通过以下命令查看 service 的详情:
kubectl describe service httpd-svc
kubectl describe service httpd-svc
可能遇见的问题:
pod 一直处于ContainerCreating状态问题。可以通过下面的命令查看详情:
kubectl describe pod
发现会报这个错误:
failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"
发现这是一个链接文件,指向 rhsm。
直接用 yum 下载相关组件:
yum -y install *rhsm*
查看是否有 /etc/rhsm/ca/redhat-uep.pem 文件,一般应该是有了,不过如果没有也不要害怕,我们可以简单的伪造一个空文件:
touch /etc/rhsm/ca/redhat-uep.pem
再 kubectl describe pod 一下,看pod的状态,应该好了。如果还是没有好的话可以 kubectl delete pod httpd ,删掉后重新新建 pod。
小结
总之遇到问题不要怕,多尝试,多去网上找资料,肯定会有办法的。资料收集能力也是程序员很重要的一种能力,可千万不能因为怕麻烦就放弃啊。
作者:RuiWang14
链接:https://www.jianshu.com/p/f49e16e7e334