才接触 kubernetes 的时候觉得太复杂了,但是反反复复装了好多遍之后发现其实也就那么回事。希望下面的内容能够帮助大家尽早度过入门时的阵痛期。
环境准备
centos 7.2(本文所有步骤都在 疼讯云 进行了验证)
安装
0.切换 yum 源 (可选)
# 没有 wget 的话需要
# yum install -y wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum 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 etc
systemctl start docker
systemctl start kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl start kube-scheduler.service
systemctl start kubelet.service
systemctl 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
可以看到:
我们启动了 3 个 pod 来运行 htppd 镜像。并为这 3 个 pod 分配了 ip,可以再 k8s 中的容器和节点进行访问,如下图:
创建服务
新建 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
可以看见 httpd-svc 分配到了一个 cluster-ip,我们可以通过这个ip进行访问:
curl 10.254.114.93:8888
可以通过以下命令查看 service 的详情:
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。
小结
总之遇到问题不要怕,多尝试,多去网上找资料,肯定会有办法的。资料收集能力也是程序员很重要的一种能力,可千万不能因为怕麻烦就放弃啊。